Python 正则表达式多行

Python regex multiline

我正在尝试从多行文本中提取一些信息,但运气不佳,我刚刚开始 None 我缺少什么,我不知道?

content = """
Cisco IOS Software, C880 Software (C880DATA-UNIVERSALK9-M), Version 15.4(2)T1, RELEASE SOFTWARE 
(fc3)

ROM: System Bootstrap, Version 12.4(22r)YB5, RELEASE SOFTWARE (fc1)



Cisco 999 (MPC8300) processor (revision 1.0) with 236544K/25600K bytes of memory.
Processor board ID FTX0000088X






Configuration register is 0x210
"""



print()
match = re.search(r".* Version (?P<OS_Version>\S+), .* Processor board ID (?P<Serial_Number>.* 
Configuration register is (?P<config_register>\S+)$", 
content, flags=re.M) 
print(match)

你的正则表达式有很多问题:

  • 缺少标记 re.DOTALL 使 . 匹配换行符。
  • \S+ 将匹配您版本后的逗号,我认为您不需要。
  • 捕获组(?P<Serial_Number>未关闭
  • Processor board IDConfiguration register之前的换行符,不是space。
  • 您在 config_register 组之后有一个 $,但实际上在文本结尾之前有一个换行符。

根据你想要的版本,你的正则表达式应该是这样的:

match = re.search(
    r".*?Version (?P<OS_Version>[\w().]+).*board ID (?P<Serial_Number>\w+).*register is (?P<config_register>\w+)",
    content,
    flags=re.M|re.DOTALL
)

match = re.search(
    r".*Version (?P<OS_Version>[\w().]+).*board ID (?P<Serial_Number>\w+).*register is (?P<config_register>\w+)",
    content,
    flags=re.M|re.DOTALL
)

不同的是,在.*的开头加了一个?,使其非贪婪,在Version第一次出现后取码。