正则表达式:如何从字符串中仅提取第一个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'