【问题标题】:Python Regex to identify IPv4 address from string [duplicate]Python正则表达式从字符串中识别IPv4地址[重复]
【发布时间】:2016-01-16 12:16:26
【问题描述】:

我有点卡在从字符串中提取 IPv4 地址。


我的输入字符串和约束如下:

  • IPv4 范围:0.0.0.0255.255.255.255
  • IPv4 地址可能/可能不存在于字符串中
    • 有效示例:this is an ip & this is an ip 200.100.2.32
  • 字符串可能以 IPv4 地址开头
    • 有效示例:200.100.2.32 is an ip |输出:['200.100.2.32']
    • 无效示例:200.100.2.32is an ip |输出:[]
  • 字符串可能以 IPv4 地址结尾
    • 有效示例:the ip is 200.100.2.32 |输出:['200.100.2.32']
    • 无效示例:the ip is200.100.2.32 |输出:[]
  • 字符串的中间可能包含一个 IPv4 地址,如果包含 - 在 IPv4 地址前后会有一个空格。
    • 有效示例:the ip is 200.100.2.32 and it is ipv4 |输出:['200.100.2.32']
    • 有效示例:the ip is 200.100.2.32and it is ipv4 |输出:[]
  • 单个字符串中可能存在多个 IP
    • 有效示例:200.100.2.32 100.50.1.16 |输出:['200.100.2.32', '100.50.1.16']
    • 无效示例:200.100.2.32.100.50.1.16 |输出:[]

我正在尝试为上述情况构建一个正则表达式,它们看起来相当简单,我无法合并所有正则表达式检查。

我一直在参考这些链接上的答案:Link1Link2Link3


有人可以帮助我朝着正确的方向前进吗?总结:

  • IPv4 前面有一个空格或从字符串的开头开始
  • IPv4 后面会有一个空格或在字符串末尾结束
  • IPv4 遵循范围:0.0.0.0255.255.255.255

代码

def find_ip(str) :
    ip_pattern = re.compile('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s') # need to strengthen the regex here
    ip = re.findall(ip_pattern, str)
    return ip

【问题讨论】:

  • 你写了什么代码?
  • 在一分钟内将代码添加到此。进行编辑。
  • ipaddress 模块能帮到你吗? split 字符串和 try 在拆分后的每个字符串上调用 IPv4Adress
  • 您已经完成了 IP 地址。现在它只是正则表达式的东西。您需要 0 个或更多,它可以出现在字符串的开头或空格之后等。就个人而言,我会为每种情况制作一个单独的正则表达式并交替它们,但我不是正则表达式向导!
  • @saulspatz - 你不需要多个正则表达式...

标签: python regex string parsing ip


【解决方案1】:

正则表达式:

(?:^|\b(?<!\.))(?:1?\d\d?|2[0-4]\d|25[0-5])(?:\.(?:1?\d\d?|2[0-4]\d|25[0-5])){3}(?=$|[^\w.])

example 的匹配项。

【讨论】:

    猜你喜欢
    • 2015-09-19
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    相关资源
    最近更新 更多