【问题标题】:How to grab first ip address from a string如何从字符串中获取第一个 IP 地址
【发布时间】:2019-08-09 05:18:21
【问题描述】:

我正在尝试从字符串中获取ip address 并遇到问题。请帮助。
inet addr:11.11.11.11 Bcast:11.11.11.111 Mask:111.111.11.1
这是我拥有的字符串,我需要在 addr 旁边的 ip 地址:

我尝试了以下代码,在python中没有做:

ip = re.findall(r'(?:\d{1,3}\.)+(?:\d{1,3})', line) 并获取索引 0 项。

结果:这实际上没有给我任何回报

【问题讨论】:

  • 尝试添加 addr 并使用捕获组 addr:((?:\d{1,3}\.)+(?:\d{1,3})) ideone.com/8qUHqL
  • 您的代码运行良好并给出了正确的结果。试试这个import re line = 'inet addr:11.11.11.11 Bcast:11.11.11.111 Mask:111.111.11.1' ip = re.findall(r'(?:\d{1,3}\.)+(?:\d{1,3})', line) print(ip[0])
  • 我检查了编辑器,我看到我得到了结果,但是当我运行测试时我没有看到任何结果
  • 显示失败的代码。
  • 我发现了我的错误。我正在检查每一行,因为第一行没有它返回 false 并退出循环。感谢大家的帮助

标签: python regex python-3.x


【解决方案1】:

您的正则表达式可能更具体,我认为您可以使用类似的内容:

addr:(?<ip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})

在python中:

match = re.match(r'addr:(?<ip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})', line)

然后您可以通过调用match.group('ip') 访问ip 组。

【讨论】:

    【解决方案2】:
    import re
    
    line = "inet addr:11.11.11.11  Bcast:11.11.11.111  Mask:111.111.11.1"
    
    pattern = r"[\d]{2}[.][\d]{2}[.][\d]{2}[.][\d]{2}[\D]"
    
    re.findall(pattern, line)
    

    ['11.11.11.11 ']

    re.findall(pattern, line)[0].strip()
    

    '11.11.11.11'

    如果列表中有多个元素,只需使用.strip() 运行列表组合

    [i.strip() for i in re.findall(pattern, line)]
    

    ['11.11.11.11']

    re.match() 不起作用,因为它会尝试从字符串开头匹配您的模式(假设您的模式不包括“inet addr:”部分。re.search() 有效,但它会丢失重复出现的元素,并且仅在成功匹配时返回模式的第一次遇到,此外您必须使用 filter 来提取元素。

    最后,解决这个问题的关键在于目标的最后一个字符xx.xx.xx.xx[\D][\D] 指令确保模式在索引 12 处查找非整数,[\s] 工作得同样好,并且匹配空格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-25
      • 2011-02-22
      • 1970-01-01
      • 2015-08-19
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多