我在从字符串中提取IPv4地址方面遇到了困难。
我的输入字符串和约束条件如下:
- IPv4范围:
0.0.0.0
至255.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
| 输出:[]
- 有效示例:
我正在尝试为上述情况构建正则表达式,它们看起来非常简单,但我无法将所有正则表达式检查都整合在一起。
有人能帮我指明正确的方向吗?总结一下:
- IPv4前面会有一个空格或者出现在字符串的开头
- IPv4后面会有一个空格或者出现在字符串的结尾
- IPv4的范围是:
0.0.0.0
到255.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
函数拆分字符串,并尝试对每个拆分后的字符串调用IPv4Address
。 - Navith