我似乎无法让我的正则表达式正常工作。有几个边缘情况我似乎无法处理。 标准路由器配置如下所示:
interface Vlan1
description
ip address 1.2.3.4/30
!
接口(interface)以“接口(interface)名称”开头,以 ! 结尾。我希望我的正则表达式捕获接口(interface)名称“Vlan1”和 ip“1.2.3.4/30”
这是我几乎可以使用的方法:re.compile(r"interface (.*)(?:[^!].*\n){1,50}? (?:no )? ip(?: v4| v6)?地址(.*?)\n")
边缘情况:
- 不知道ip从接口(interface)名来多少行(50应该够了)
- 有时 ip 地址行可能是:“ip v4 地址”、“ip v6 地址”或“无 ip 地址”
我想我已经完成了所有这些工作,但是当出现如下界面时:
interface Vlan2
!
它打破了一切。在“界面”和“!”之间我还可以做些什么来捕捉吗?
最佳答案
由于非可选部分
、ip
和 地址
,您的正则表达式与空 接口(interface)部分。由于它的复杂性,我重新开始并建议这个更简单的:
re.compile(r"^interface (\w+)(?:[^!]*?address (\S+))?.*?!", re.M+re.S)
对于您的两个示例,findall()
将产生 [('Vlan1', '1.2.3.4/30'), ('Vlan2', '')]
.
关于用于解析路由器配置的 Python 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66993513/