鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: hynet1024

[已解决]正则表达式

[复制链接]
发表于 2022-5-18 22:52:53 | 显示全部楼层
hynet1024 发表于 2022-5-18 22:48
对呀。第一条输出了没问题,第二条没有完全匹配到,因为最后的259不是有效ip数字,只匹配到了25

问题是 192.168.1.259 这个不是一个有效的ip
这个 print(re.search(pattern, 'abc192.168.1.259efg')) 不应该输出None吗?
我感觉这个程序应该把 192.168.1.259 认为是一个无效的ip,而不应该把 192.168.1.25 认为是一个有效的ip
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-18 22:56:20 | 显示全部楼层
259是一个整体,你不能匹配到25,然后说这是一个有效的ip
你应该匹配到259,然后认为这是一个无效的ip
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-18 22:58:21 | 显示全部楼层
如果把后面的代码改为   {3}([01]\d{0,1}\d{0,1}|2[0-4]\d|25[0-5]) 就会输出 Nono

奇怪吧???这里面大有文章啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-18 23:02:32 | 显示全部楼层
def ip(ip_add):
    tmp = re.search(r'(([01]{0,1}\d{0,1}\d{0,1}|2[0-4]\d|25[0-5])\.){3}([01]\d{0,1}\d{0,1}|2[0-4]\d|25[0-5])',ip_add)
    print('Yes,', ip_add, '是一个合规的IP地址') if ip_add in str(tmp) else print('No,',ip_add, '不是一个合规的IP地址')
   
ip('255.0.0.259')

我本来是想做成这样一个东东,没想到引出这么多疑问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-18 23:08:02 | 显示全部楼层
hynet1024 发表于 2022-5-18 23:02
def ip(ip_add):
    tmp = re.search(r'(([01]{0,1}\d{0,1}\d{0,1}|2[0-4]\d|25[0-5])\.){3}([01]\d{0,1} ...

那就这样
https://fishc.com.cn/forum.php?m ... 571&pid=5841858
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-19 07:49:18 | 显示全部楼层
hynet1024 发表于 2022-5-18 22:29
终于弄明确了
1、如果不调整顺序,则要去掉一个{0,1}
2、调换一下顺序,则可以保留{0,1}


因为如果不改变顺序,先匹配 [01]{0,1}\d{0,1}\d{0,1} 时,第一个可以匹配 0 次,那么就只需要匹配后两个数就可满足,后续的就不匹配了直接返回

改变顺序后,先匹配 2 开头的,如果2 开头的不匹配才开始匹配 1、0 开头的,这样就保证了先匹配到更大的,再匹配到小范围的

另外去掉 {0,1} 还是无法正确匹配,如果最后一位小于 100 ,那么也会导致匹配不到,所以还是调换下位置比较何时
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-20 10:43:54 | 显示全部楼层
多谢指点!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 05:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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