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

发布于 2021-01-29 16:42:06

给定以下字符串(或类似的字符串,其中一些可能包含多个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地址?

非常感谢。

关注者
0
被浏览
142
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    使用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'
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看