IP 地址 - 正则表达式:收紧 IPv4 正则表达式以省略 ESMTPSA ID



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 <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。在这里看到它的实际效果。

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

[^.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或类似

最新更新