Python 正则表达式从字符串中识别 IPv4 地址

sud*_*hkr 5 python regex string ip parsing

我有点陷入从字符串中提取 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
Run Code Online (Sandbox Code Playgroud)

Dmi*_*lov 2

正则表达式:

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

匹配的一个例子