【问题标题】:Exclude an IP from a regex that extract IPs from text file从从文本文件中提取 IP 的正则表达式中排除 IP
【发布时间】:2017-05-15 23:59:59
【问题描述】:

我之前发布了一个关于此的问题,但忘记了另一个案例。这是我的第一个问题:

Regex to include and exclude certain IPs

另一种情况是路由表中的这一行:

D*EX 0.0.0.0/0 [170/19664] via 10.10.10.1, 5d22h, Vlan10
           [170/19664] via 10.10.10.1, 5d22h, Vlan20

如何编辑我的正则表达式以从下面的正则表达式中排除 0.0.0.0/0 IP:

(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\/(?:[\d]{1,3})\b(?! is variably)

我试过这些,但没有用:

(?! 0.0.0.0/0)(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\/(?:[\d]{1,3})\b(?! is variably)
                                 AND
(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\/(?:[\d]{1,3})\b(?! is variably)(?! 0.0.0.0/0)

谢谢

达蒙

【问题讨论】:

  • 您不需要在正则表达式中执行此操作。你只是让自己变得更难。保持你的正则表达式不变,然后在你的程序逻辑中(毕竟这是 Python),忽略0.0.0.0 地址。你的程序会更清晰。
  • 感谢您的好建议。

标签: python regex python-2.7


【解决方案1】:

正如@Greg Hewgill 所说,我认为您可以使用if 声明。

if ('0.0.0.0/0' not in text) and ('is variably' not in text):
    match = re.findall(r'(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\/(?:[\d]{1,3})\b', text)

如果你真的想用正则表达式来解决它,就是这样。 https://regex101.com/r/jTu8cj/2

(?!0\.0\.0\.0/0)(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\/(?:[\d]{1,3})\b(?! is variably)

# Positive
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.140.0/2
10.10.140.0/16
2.2.2.2/24
5.5.5.5.5/24

# Negative
10.0.0.0
     10.10.60.0/16 is variably subnetted, 58 subnets, 4 masks
0.0.0.0/0 [170/19664] via 10.10.10.1, 5d22h, Vlan10

【讨论】:

  • 好主意 :) 我对这两种情况都使用了 if 语句,并为休息使用了正则表达式(您的第一个建议),并且效果很好。谢谢!!!!
  • 很高兴我能帮上忙 :)
猜你喜欢
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 2020-01-29
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-30
相关资源
最近更新 更多