【问题标题】:Extract word from string Using python regex使用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 的成员。

标签: python regex


【解决方案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]+)
  • 当然。我可以将其添加到我的答案中吗?
猜你喜欢
  • 2023-01-07
  • 1970-01-01
  • 2012-05-27
  • 2020-06-09
  • 1970-01-01
  • 1970-01-01
  • 2020-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多