鱼C论坛

 找回密码
 立即注册
查看: 937|回复: 2

[已解决]关于python正则表达式

[复制链接]
发表于 2021-12-25 14:01:42 | 显示全部楼层 |阅读模式
10鱼币
请教各位大神,为什么我使用了正则表达式获取IP地址,一直匹配不到正确的IP,就如我截图的那样子,当IP地址有2开头的时候,如202,但是为啥只是匹配到20,而最后一个2不见了,往下需要匹配的IP地址也是如此??这个问题出现在哪里???
最佳答案
2021-12-25 14:01:43
本帖最后由 suchocolate 于 2021-12-25 14:29 编辑

(a|b|c|d)这种或的原则是前面的匹配了,后面的就不看了。所以一般写的时候严格的放在前面,范围宽的放后面。如:
  1. (25[0-5]|2[0-4]\d|[01]?\d?\d)
复制代码

你的语法中 [0-1]?\d?\d 就是包含0-199的数字,这个是没有问题的,但是他包含的范围比较广,所以202,就后re误以为是20,就算是匹配了,所以后续就不看了。
又因为你的点号放错了位置,所以匹配不到202。
正确应该是这样的:
  1. a = r'"IP">(?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d)<'
复制代码

但其实你这个直接用这个也可以:
  1. a = r'"IP">(.*?)<'
复制代码



3892edbc4879c6ca9a52fe6ab533b91.png

最佳答案

查看完整内容

(a|b|c|d)这种或的原则是前面的匹配了,后面的就不看了。所以一般写的时候严格的放在前面,范围宽的放后面。如: 你的语法中 [0-1]?\d?\d 就是包含0-199的数字,这个是没有问题的,但是他包含的范围比较广,所以202,就后re误以为是20,就算是匹配了,所以后续就不看了。 又因为你的点号放错了位置,所以匹配不到202。 正确应该是这样的: 但其实你这个直接用这个也可以:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-25 14:01:43 | 显示全部楼层    本楼为最佳答案   
本帖最后由 suchocolate 于 2021-12-25 14:29 编辑

(a|b|c|d)这种或的原则是前面的匹配了,后面的就不看了。所以一般写的时候严格的放在前面,范围宽的放后面。如:
  1. (25[0-5]|2[0-4]\d|[01]?\d?\d)
复制代码

你的语法中 [0-1]?\d?\d 就是包含0-199的数字,这个是没有问题的,但是他包含的范围比较广,所以202,就后re误以为是20,就算是匹配了,所以后续就不看了。
又因为你的点号放错了位置,所以匹配不到202。
正确应该是这样的:
  1. a = r'"IP">(?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d)<'
复制代码

但其实你这个直接用这个也可以:
  1. a = r'"IP">(.*?)<'
复制代码



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

感谢您,讲解得非常好,能举一反三的方式推荐另外的写法。赞
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 13:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表