我想知道下面的问题是否可以用一个正则表达式来解决,或者我应该做一个标准循环并逐行求值,
当我运行包含的代码时,我得到['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.*?^#$'''

10-08 01:00