给定以下字符串(或类似字符串,其中一些可能包含多个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地址,我怎样才能使它只匹配第一个?
非常感谢。
答案 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.70
和015.06.03.14
。
您是否可以使用括号单独输出IP号码?如果是这样,您可以将正则表达式更改为r'\[(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\]'
。这样会更安全。