使用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从字符串中提取单词的主要内容,如果未能解决你的问题,请参考以下文章