给定以下字符串(或类似的字符串,其中一些可能包含多个 IP 地址):
from mail2.oknotify2.com (mail2.oknotify2.com. [208.83.243.70]) by mx.google.com with ESMTP id dp5si2596299pdb.170.2015.06.03.14.12.03
我希望在 Python 中提取第一个也是唯一一个 IP 地址。在 nregex.com 上尝试使用类似 ([0-9]{2,}\.){3}([0-9]{2,}){1}
的第一次尝试, 看起来几乎 OK,匹配 IP 地址很好,但也匹配另一个大致类似于 IP 地址 (170.2015.06.03.14.12.03) 的子字符串。但是,当将相同的模式传递给 re.compile/re.findall
时,结果是:
[(u'243.', u'70'), (u'06.', u'03')]
很明显正则表达式不好。我怎样才能改进它,使它更整洁并捕获所有 IPV4 地址,我怎样才能使它只匹配第一个地址?
非常感谢。
最佳答案
按照以下模式使用 re.search
:
>>> s = 'from mail2.oknotify2.com (mail2.oknotify2.com. [208.83.243.70]) by mx.google.com with ESMTP id dp5si2596299pdb.170.2015.06.03.14.12.03'
>>> import re
>>> re.search(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', s).group()
'208.83.243.70'
关于python - 正则表达式:如何从字符串中提取第一个 IP 地址(在 Python 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30654285/