qq13700416415 发表于 2020-8-13 10:27:50

正则表达式之IP值匹配的问题。

本帖最后由 qq13700416415 于 2020-8-13 10:29 编辑

如图,匹配ip值,为啥前三个255都能出来,第四个255就只能显示前两位数,没搞明白哪里出错了,求大神解惑。

sunrise085 发表于 2020-8-13 10:27:51

这就是小甲鱼在视频中所提到的bug
前面的255能够匹配,是因为后后面的 . 限制,最后面的无法匹配全部255,是因为?\d?\d|2\d|25这是三部分,第一部分就匹配到了25,所以就不再看是否匹配后面的内容了

需要把这三部分调整换一下位置,先具体后笼统。也就是吧这三者完全翻个顺序,先匹配25开头的三位;若没有,再匹配2开头的三位;若没有,最后在匹配0或1开头的一到三位
p = r'(?:(?:25|2\d|?\d?\d)\.){3}(?:25|2\d|?\d?\d)'

zltzlt 发表于 2020-8-13 10:32:20

把你的正则表达式发一下

yhhpf 发表于 2020-8-13 10:39:31

看着...感觉...表达式好像...是没错- -
你把代码发下吧,正则太长了

qq13700416415 发表于 2020-8-13 10:46:39

import re
p = r'(?:(?:?\d?\d|2\d|25)\.){3}(?:?\d?\d|2\d|25)'
re.findall(p, '255.255.255.255')

freeck2013 发表于 2020-8-13 17:11:19

最后一个加个{1,} 强制贪婪
import re
p = r'(?:(?:?\d?\d|2\d|25)\.){3}(?:?\d?\d|2\d|25){1,}'
re.findall(p, '255.255.255.255')

qq13700416415 发表于 2020-8-13 19:33:26

freeck2013 发表于 2020-8-13 17:11
最后一个加个{1,} 强制贪婪

整个四个元祖实现{1,}可以实现是什么原理,没搞明白。。

freeck2013 发表于 2020-8-13 20:01:49

qq13700416415 发表于 2020-8-13 19:33
整个四个元祖实现{1,}可以实现是什么原理,没搞明白。。

就是贪婪啊
你要是加上个问好也就是{1,}?就和你原来一样
import re
p = r'(?:(?:?\d?\d|2\d|25)\.){3}(?:?\d?\d|2\d|25){1,}?'
re.findall(p, '255.255.255.255')
页: [1]
查看完整版本: 正则表达式之IP值匹配的问题。