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 ID
和Configuration 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
第一次出现后取码。
我正在尝试从多行文本中提取一些信息,但运气不佳,我刚刚开始 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 ID
和Configuration 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
第一次出现后取码。