正则表达式:如何从字符串中仅提取第一个IP地址(在Python中)


问题内容

给定以下字符串(或类似的字符串,其中一些可能包含多个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地址。第一次尝试使用类似于([0-9]{2,}\.){3}([0-9]{2,}){1}在nregex.com上进行尝试时,看起来
几乎
可以,可以很好地匹配IP地址,但也可以匹配另一个大致类似于IP地址的子字符串(170.2015.06.03.14.12.03)。如果将相同的模式传递给re.compile/re.findall,则结果是:

[(u'243.', u'70'), (u'06.', u'03')]

因此很明显,正则表达式不好。我如何改进它,使其更整洁并捕获所有IPV4地址,又如何使其仅匹配第一个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'