用于解析路由器配置的 Python 正则表达式

标签 python regex

我似乎无法让我的正则表达式正常工作。有几个边缘情况我似乎无法处理。 标准路由器配置如下所示:

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/

相关文章:

python - Networkx 和 Matplotlib : how to access node attributes and show them as annotation

python - 将多列表转换为两列表

regex - 如何使用 bash 将每一行提取到不同的变量中

regex - 仅在特定列之后替换文本文件中的 CR/LF

c++ - 正则表达式用另一个字符替换 C++ 中的单个字符

python - 尽管安装了 GEOS,但获取 "django.core.exceptions.ImproperlyConfigured: GEOS is required and has not been detected."

python - 有没有办法在我的搜索和替换代码中构建异常?

python - 从python中的PKCS7信封中提取userCertificate

php - 正则表达式用于根据某些条件验证数字

python字符串替换数字