【问题标题】:Python Regex to Extract Word From Multiline StringPython 正则表达式从多行字符串中提取单词
【发布时间】:2017-08-09 05:48:51
【问题描述】:

如何从以下 python 字符串中提取序列号:

blah:              asdf
blah:              asdf
Serial Number:     1234ABCD
blah               asdf
blah               asdf

我尝试了以下方法,但它似乎不起作用:

serial_num = re.search("^Serial Number:\s*(\w*)$", serial_num, re.MULTILINE)

【问题讨论】:

  • print(re.search("^Serial Number:\s*(\w*)$", serial_num, re.MULTILINE).group(1)) 正确提取 1234ABCD:无法重现您的问题...
  • 我正在使用“subprocess.Popen”命令的输出来获取字符串。也许它不是一个字符串,这就是为什么我无法提取它?
  • 绝对是字符串。我使用了 isinstance(serial_num, str)。我很好奇为什么原始符号对我不起作用。此外,当我尝试使用“.group(1)”方法时,出现以下错误:“AttributeError: 'NoneType' object has no attribute 'group'”

标签: python regex match extract multiline


【解决方案1】:

您也许可以使用以下 regex ...

Serial\sNumber.*?(?=\w)(\w+)

见regex demo

python (demo)

import re

s = """
blah:              asdf
blah:              asdf
Serial Number:     1234ABCD
blah               asdf
blah               asdf
"""
r = r"Serial\sNumber.*?(?=\w)(\w+)"
m = re.findall(r, s)
print(m)[0]

【讨论】:

  • 所以实际字符串来自运行以下命令:serial_num = subprocess.Popen(["/usr/bin/FastCli","-c","show version"], stdout=subprocess .PIPE).communicate()[0]。我正在通过 Arista 交换机执行此操作。我开始怀疑该子进程命令的输出是否不干净。我尝试了您的解决方案,但它不适用于该字符串。
  • 你能提供一个不起作用的字符串的例子吗?
  • 哎呀!开关“show version”命令的实际输出使用“Serial number”而不是“Serial Number”。我能够让这个解决方案发挥作用。不管出于何种原因,我都无法让我原来的正则表达式工作。
  • @ChrisWillis 很高兴它成功了!顺便说一句,接受将不胜感激:-)
猜你喜欢
  • 1970-01-01
  • 2011-03-09
  • 2019-03-18
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多