正则表达式:收紧IPv4正则表达式以省略ESMTPSA ID?

时间:2015-06-10 23:25:26

标签: regex ip-address ipv4

ESMTPSA id是一个类似于:

的字符串
w12sm4743917pbs.68.2015.06.04.16.21.51

它可以出现在电子邮件中的Received:from标题中,例如以下示例中:

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 <myemailaddress@gmail.com>
        (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
        Thu, 04 Jun 2015 16:21:52 -0700 (PDT)

我有以下正则表达式,可以很好地从这样的标题中提取IPv4地址:

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

问题是,它还提取了一大块ESMTPSA ID: 015.06.04.16 。在行动here中查看。

我们如何收紧正则表达式以便它只提取IPv4地址?注意:地址总是在方括号中,如上例所示。我使用的是Python,我知道我可以使用ipaddress模块验证所有匹配项,但是首先不匹配会更方便。

1 个答案:

答案 0 :(得分: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或类似的