使用python regex从字符串中提取单词

Posted

技术标签:

【中文标题】使用python regex从字符串中提取单词【英文标题】:Extract word from string Using python regex 【发布时间】:2014-07-22 10:45:36 【问题描述】:

我想从字符串中提取型号,

/dev/sda:

ATA device, with non-removable media
    Model Number:       ST500DM002-1BD142                       
    Serial Number:      W2AQHKME
    Firmware Revision:  KC45    
    Transport:          Serial, SATA Rev 3.0

我写的正则表达式,

re.search("Model Number:(\s+[\w+^\w|d]\n\t*)", str)

但问题是,它不匹配字符串 str 中的任何特殊字符(非 ascii)

Python 2.6

注意:字符串可以是任意字符/数字(包括特殊字符)的组合

【问题讨论】:

这是 Python 2 还是 3?您能给我们提供哪些匹配的示例输入? @MartijnPieters Python 2.6 您的字符串是unicode 对象还是字节字符串? @MartijnPieters 我已经发布了上面的字符串。对不起,我不明白你在问什么 请注意,[\w+^\w|d]不是一个分组,而是一个字符类。您正在匹配 一个 字符,该字符是集合 \w+^|d 的成员。 【参考方案1】:

你的正则表达式是,

Model Number:\s*([\w-]+)

Python 代码是,

>>> import re
>>> s = """
... 
... /dev/sda:
... 
... ATA device, with non-removable media
...     Model Number:       ST500DM002-1BD142                       
...     Serial Number:      W2AQHKME
...     Firmware Revision:  KC45    
...     Transport:          Serial, SATA Rev 3.0"""
>>> m = re.search(r'Model Number:\s*([^\n]+)', s)
>>> m.group(1)
'ST500DM002-1BD142'

说明:

Model Number:\s* 匹配字符串 Model Number: 后跟零个或多个空格。 ([^\n]+) 捕获任何字符但不是换行符一次或多次。

【讨论】:

用空格分隔的单词会失败Model Number: Virtual Box @Pilot 在这种情况下使用[-\s\w]+ @hjpotter92 结果'Model Number: ST500DM002-1BD142 \n\tSerial Number' @Pilot 使用 Model Number:\s*([^\n]+) 当然。我可以将其添加到我的答案中吗?

以上是关于使用python regex从字符串中提取单词的主要内容,如果未能解决你的问题,请参考以下文章

从python中的字符串中提取英文单词

如何使用 RegEx 提取单词之间的文本?

使用 RegEx 从字符串中提取特定部分

从数据框字符串列中提取特定单词并存储在 Python 的新列中

python中如何提取单词的首字母

从 URL 中提取部分字符串 - Java Regex