正则表达式匹配 ip 地址的问题

2019-03-10 18:34:08 +08:00
 heavenyoung
代码:re.search(r'((\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]\n)','1.1.1.10')
输出:<re.Match object; span=(0, 7), match='1.1.1.1'>

最后一位的 0 或者 00 都匹配不了是什么问题啊
2274 次点击
所在节点    Python
7 条回复
msg7086
2019-03-10 18:42:57 +08:00
因为.1 就满足匹配条件了,不会继续往下匹配?
pkokp8
2019-03-10 19:03:28 +08:00
你这里满足了\d,就不往下继续了
heavenyoung
2019-03-10 19:36:29 +08:00
谢谢,突然卡住了😂
heavenyoung
2019-03-10 19:43:02 +08:00
@msg7086 但是为什么前面都匹配上了,怎么改一下呢
msg7086
2019-03-10 20:18:25 +08:00
因为前面要匹配 点 啊。
要匹配到结尾需要用$。
(说句实话,我是很不喜欢用正则来做这种检测的。正则是处理文字的,不是检查数字范围用的。)
heavenyoung
2019-03-10 20:41:49 +08:00
@msg7086 ok,懂了🙏
hanssx
2019-03-14 13:31:05 +08:00
自己在网上搜的一直在用的
def is_valid_ip(ip):
p = re.compile('^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$')
if p.match(ip):
return True
else:
return False

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/543066

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX