林二捆 发表于 2021-12-25 14:01:42

关于python正则表达式

请教各位大神,为什么我使用了正则表达式获取IP地址,一直匹配不到正确的IP,就如我截图的那样子,当IP地址有2开头的时候,如202,但是为啥只是匹配到20,而最后一个2不见了,往下需要匹配的IP地址也是如此??这个问题出现在哪里???

suchocolate 发表于 2021-12-25 14:01:43

本帖最后由 suchocolate 于 2021-12-25 14:29 编辑

(a|b|c|d)这种或的原则是前面的匹配了,后面的就不看了。所以一般写的时候严格的放在前面,范围宽的放后面。如: (25|2\d|?\d?\d)
你的语法中 ?\d?\d 就是包含0-199的数字,这个是没有问题的,但是他包含的范围比较广,所以202,就后re误以为是20,就算是匹配了,所以后续就不看了。
又因为你的点号放错了位置,所以匹配不到202。
正确应该是这样的:a = r'"IP">(?:(?:25|2\d|?\d?\d)\.){3}(?:25|2\d|?\d?\d)<'
但其实你这个直接用这个也可以:a = r'"IP">(.*?)<'


林二捆 发表于 2021-12-26 09:12:52

suchocolate 发表于 2021-12-25 14:01
(a|b|c|d)这种或的原则是前面的匹配了,后面的就不看了。所以一般写的时候严格的放在前面,范围宽的放后面 ...

感谢您,讲解得非常好,能举一反三的方式推荐另外的写法。赞
页: [1]
查看完整版本: 关于python正则表达式