Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从从文本文件提取IP的正则表达式中排除IP_Python_Regex_Python 2.7 - Fatal编程技术网

Python 从从文本文件提取IP的正则表达式中排除IP

Python 从从文本文件提取IP的正则表达式中排除IP,python,regex,python-2.7,Python,Regex,Python 2.7,我之前发布了一个关于这个的问题,但是忘记了另外一个案例。这是我的第一个问题: 另一种情况是路由表中的这一行: 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*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)
谢谢


Damon

正如@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)
如果你真的想用正则表达式来解决它,这就是它

(?!0\.0\.0\.0/0)(?:[\d]{1,3})\(?:[\d]{1,3})\(?:[\d]{1,3})\(?:[\d]{1,3})\/(?:[\d]{1,3})b(?!是可变的)


你不需要在正则表达式中这样做。你只是让你自己更难。保持正则表达式不变,然后在程序逻辑中(毕竟这是Python),忽略
0.0.0.0
地址。你的程序会更清晰。谢谢你的建议。好主意:)我对这两种情况都使用了if语句,对rest使用了regex(你的第一个建议),效果非常好。谢谢很高兴我帮了忙:)
# 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