Python 3.x 如何使Python正则表达式看起来更贪婪
我试图使用正向查找标记捕获“路由器bgp”和最后一个“出口地址族”之间的所有行,但匹配只会捕获到第一个“出口地址族”。如何使查找标记贪婪地捕获到最后一个实例Python 3.x 如何使Python正则表达式看起来更贪婪,python-3.x,regex,Python 3.x,Regex,我试图使用正向查找标记捕获“路由器bgp”和最后一个“出口地址族”之间的所有行,但匹配只会捕获到第一个“出口地址族”。如何使查找标记贪婪地捕获到最后一个实例 import re config =''' router bgp 400 bgp log-neighbor-changes neighbor 10:1::19 remote-as 12000 neighbor 10.1.0.2 remote-as 400 ! address-family ipv4 network 2.0.
import re
config ='''
router bgp 400
bgp log-neighbor-changes
neighbor 10:1::19 remote-as 12000
neighbor 10.1.0.2 remote-as 400
!
address-family ipv4
network 2.0.1.0 mask 255.255.255.0
neighbor 10.1.0.38 activate
exit-address-family
!
address-family ipv6
neighbor 10:1::19 activate
exit-address-family
!
stuff i don't want
more stuff i don't want
'''
rx_bgp_config = re.findall(r'router\s+bgp\s+(\S+)(.*?)(?<=exit-address-family)', config, re.S|re.M)
bgp_config = rx_bgp_config[0]
print(bgp_config)
重新导入
配置=“”
路由器bgp 400
日志邻居更改
邻居10:1::19远程as 12000
邻居10.1.0.2远程as 400
!
地址族ipv4
网络2.0.1.0掩码255.255.255.0
邻居10.1.0.38激活
出口地址族
!
地址族ipv6
邻居10:1::19激活
出口地址族
!
我不想要的东西
更多我不想要的东西
'''
rx_bgp_config=re.findall(r'router\s+bgp\s+(\s+)(*?)检查此链接:
非贪婪量词尽可能少地匹配元素
可能。你可以通过以下方法将贪婪的量词变成懒惰的量词
只需添加一个
在您的情况下,您应该删除?
,使其一直搜索到最后一个匹配案例。
改变你的模式
router\s+bgp\s+(\s+)(*?)删除?
。