2015-06-10 52 views
1

的ESMTPSA ID是一個字符串,它看起來像:正則表達式:收緊IPv4正則表達式以忽略ESMTPSA ID?

w12sm4743917pbs.68.2015.06.04.16.21.51 

它可以出現在收稿日期:從標題中的電子郵件,如下面的例子:

Received: from [192.168.0.140] (n11649196059.netvigator.com. [116.49.196.59]) 
     by mx.google.com with ESMTPSA id w12sm4743917pbs.68.2015.06.04.16.21.51 
     for <[email protected]> 
     (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); 
     Thu, 04 Jun 2015 16:21:52 -0700 (PDT) 

我有下面的正則表達式,其在提取的IPv4 addess從這樣的標題效果很好:

d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} 

問題是,它也提取ESMTPSA ID的一大塊:015.06.04.16。見行動here

我們如何收緊正則表達式以便它只提取IPv4地址?注意:地址是而不是總是在方括號中,如上例所示。我正在使用Python,我知道我可以使用ipaddress模塊來驗證所有匹配,但對於我來說首先不匹配會更方便。

回答

1
[^\.\d]\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}[^\.\d] 

和修剪,從開始和結束字符串1號(或者使用捕獲組)

PS或簡單地捕獲組

使用你的第一個正則表達式我

PS2

[^\.\d](\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})[^\.\d] 

大多數正則表達式工具允許您通過麻木得到捕獲組呃(按順序)像\ 1或類似的

+0

它檢查ip前後的不是數字而不是「。」 –

+0

我看到了擴展正則表達式的邏輯,但它不適用於我(既不是你原來的更新):https://regex101.com/r/yP2rG2/1當你說修剪一個符號,你指的是什麼符號? – Pyderman

+0

這個正則表達式將在ip之前匹配一個simbol,並且在 –