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

时间:2015-06-04 21:13:56

标签: python regex

给定以下字符串(或类似字符串,其中一些可能包含多个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}时首次尝试,看起来几乎确定,匹配IP地址正常,但也匹配大致类似于IP地址的其他子字符串(170.2015) .06.03.14.12.03)。但是,当相同的模式传递给re.compile/re.findall时,结果是:

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

很明显,正则表达式并不好。如何改进它以便它更整洁并捕获所有IPV4地址,我怎样才能使它只匹配第一个?

非常感谢。

2 个答案:

答案 0 :(得分:5)

使用..public/stylesheets/使用以下模式:

re.search

答案 1 :(得分:1)

你想要的正则表达式是r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'。这可以捕获由点分隔的4到4位数字。

如果IP编号始终位于字符串中的其他编号之前,则可以避免使用非贪婪功能(例如re.find)来选择它。相比之下,re.findall会同时包含208.83.243.70015.06.03.14

您是否可以使用括号单独输出IP号码?如果是这样,您可以将正则表达式更改为r'\[(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\]'。这样会更安全。