gpt4 book ai didi

python - Python 中多行匹配模式

转载 作者:行者123 更新时间:2023-12-01 02:40:24 25 4
gpt4 key购买 nike

我是 Python 正则表达式新手。我试图从输出中得到低于 lst 的值。

output="""
IP = 10.10.10.1
BGP version 4, remote router ID 0.0.0.0
State = Established
IP = 10.10.10.2
BGP version 4, remote router ID 0.0.0.0
State = Active
IP = 10.10.10.3
BGP version 4, remote router ID 0.0.0.0
State = Active
IP = 10.10.10.4
BGP version 4, remote router ID 0.0.0.0
State = Established
"""

我正在尝试使用下面的正则表达式,但没有运气。有人可以帮我吗?

lst = re.findall(r'IP = (\S+)\n\nState = (\S+)',output, re.M)

lst 应填写

[('10.10.10.1', 'Established'), ('10.10.10.2', 'Active'), ('10.10.10.3', 'Active'), ('10.10.10.4', 'Established')]

最佳答案

试试这个:

In [101]: pat = r'IP\s*\=\s*([^\n\r]*)[\r\n][^\=]*?State\s*\=\s*([^\n\r]*)'

In [102]: re.findall(pat, output, flags=re.M & re.S)
Out[102]:
[('10.10.10.1', 'Established'),
('10.10.10.2', 'Active'),
('10.10.10.3', 'Active'),
('10.10.10.4', 'Established')]

注:请关注@WiktorStribiżew's RegEx ,这更加优雅:

re.findall(r'(?sm)^IP = (\S+).*?^State = (\S+)',output)

关于python - Python 中多行匹配模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45774440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com