我想知道下面的问题是否可以用一个正则表达式来解决,或者我应该做一个标准循环并逐行求值,
当我运行包含的代码时,我得到['Ethernet0/22', 'Ethernet0/24']
,
唯一的结果应该是['Ethernet0/23', 'Ethernet0/25']
。
有什么建议吗?
import re
txt='''#
interface Ethernet0/22
stp disable
broadcast-suppression 5
mac-address max-mac-count 1
port access vlan 452
#
interface Ethernet0/23
stp disable
description BTO
broadcast-suppression 5
port access vlan 2421
#
interface Ethernet0/24
stp disable
description Avaya G700
broadcast-suppression 5
port access vlan 452
#
interface Ethernet0/25
stp disable
description BTO
broadcast-suppression 5
port access vlan 2421
#
'''
re1 = '''^interface (.*?$).*?BTO.*?^#$'''
rg = re.compile(re1,re.IGNORECASE|re.DOTALL|re.MULTILINE)
m = rg.findall(txt)
if m:
print m
最佳答案
你的问题是regex继续在下一个组中找到BTO。作为一个快速的解决方法,您可以在接口id中禁止使用“#”字符(假设这在记录中无效,并且只将它们分隔开)。
re1 = '''^interface ([^#]*?$)[^#]*?BTO.*?^#$'''