2017-05-15 70 views
1

我之前發佈了一個關於此問題的問題,但忘記了另外一個案例。這是我的第一個問題:從正則表達式中排除IP從文本文件中提取IP

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) 

感謝

達蒙

+6

你並不需要這樣做的正則表達式。你只是讓自己更難。保持你的正則表達式相同,然後在你的程序邏輯中(畢竟這是Python),忽略「0.0.0.0」地址。你的程序會更清晰。 –

+0

非常感謝您的建議。 – Damon

回答

1

由於@格雷格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 
+0

好主意:)我用if語句去處理兩種情況和正則表達式來休息(你的第一個建議),它完美地工作。謝謝!!!! – Damon

+0

很高興我幫助:) –

相關問題