【发布时间】:2016-01-16 12:16:26
【问题描述】:
我有点卡在从字符串中提取 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|输出:[]
- 有效示例:
我正在尝试为上述情况构建一个正则表达式,它们看起来相当简单,我无法合并所有正则表达式检查。
我一直在参考这些链接上的答案:Link1、Link2、Link3
有人可以帮助我朝着正确的方向前进吗?总结:
- 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字符串和try在拆分后的每个字符串上调用IPv4Adress。 -
您已经完成了 IP 地址。现在它只是正则表达式的东西。您需要 0 个或更多,它可以出现在字符串的开头或空格之后等。就个人而言,我会为每种情况制作一个单独的正则表达式并交替它们,但我不是正则表达式向导!
-
@saulspatz - 你不需要多个正则表达式...
标签: python regex string parsing ip