Regex包含和排除某些ip

2024-09-26 22:13:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个实用的python2.7代码,可以从路由表中提取ip。它只提取x.x.x.x/xx格式的ip。但是,我有一个问题,排除路由表中的一些行。你知道吗

例如,该行:

D       10.50.80.0/24 [90/3072] via 10.10.10.1, 3w6d, Vlan10

在这行我只关心10.50.80.0/24。因为这是唯一一个使用/24符号的ip,所以我只能抓住它,让regex忽略once而不使用/(例如,10.10.10.1)。但在表中,我们有以下两个异常:

     10.10.60.0/16 is variably subnetted, 58 subnets, 4 masks
C       10.10.140.0/24 is directly connected, Vlan240

我想在第二行(10.10.140.0/24)捕获IP,但不是第一行(10.10.60.0/16)。程序正在提取IP并检查表中是否有可用的子网。10.10.60.0/16是一个问题,因为不是说10.10.60.0/16在表中,而是说这个子网有可变的子网。你知道吗

目前我的工具正在捕获这个IP并将整个10.10.60.0/16范围标记为表中的,这是不正确的。我尝试了一些正则表达式编辑,但不是很满意。我不想意外地跳过任何子网,特别是第二行是类似于第一。捕获所有正确的子网是非常重要的。你知道吗

有人能建议一个最好的正则表达式编辑来完成这一点。只有具有x.x.x.x/xx的跳过行是可变子网、x子网、x掩码

这是我目前的代码:

match = re.findall(r'(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\/(?:[\d]{1,3})', text)

谢谢 达蒙


Tags: 代码ip编辑is格式符号viaregex
1条回答
网友
1楼 · 发布于 2024-09-26 22:13:42

如果我答对了您的问题,您希望您现有的regex跳过任何后跟的IP/子网“可变子网”。这样做可以使用以下正则表达式:

(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\/(?:[\d]{1,3})\b(?! is variably)
  • 我在正则表达式的末尾添加了\b(?! is variably)
  • \b结尾表示单词边界
  • (?! is variably)有一个负的前瞻(?!,它确保文本'is variably'不在IP/子网之后。你知道吗

演示:https://regex101.com/r/jTu8cj/1

匹配项:

D       10.50.80.0/24 [90/3072] via 10.10.10.1, 3w6d, Vlan10
C       10.10.140.0/24 is directly connected, Vlan240

不匹配:

10.10.60.0/16 is variably subnetted, 58 subnets, 4 masks
255.255.255.1

相关问题 更多 >

    热门问题