2015-06-10 24 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,并且在 –