对呀。第一条输出了没问题,第二条没有完全匹配到,因为最后的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
259是一个整体,你不能匹配到25,然后说这是一个有效的ip
你应该匹配到259,然后认为这是一个无效的ip
如果把后面的代码改为 {3}(\d{0,1}\d{0,1}|2\d|25) 就会输出 Nono
奇怪吧???这里面大有文章啊 def ip(ip_add):
tmp = re.search(r'(({0,1}\d{0,1}\d{0,1}|2\d|25)\.){3}(\d{0,1}\d{0,1}|2\d|25)',ip_add)
print('Yes,', ip_add, '是一个合规的IP地址') if ip_add in str(tmp) else print('No,',ip_add, '不是一个合规的IP地址')
ip('255.0.0.259')
我本来是想做成这样一个东东,没想到引出这么多疑问 hynet1024 发表于 2022-5-18 23:02
def ip(ip_add):
tmp = re.search(r'(({0,1}\d{0,1}\d{0,1}|2\d|25)\.){3}(\d{0,1} ...
那就这样
https://fishc.com.cn/forum.php?mod=redirect&goto=findpost&ptid=213571&pid=5841858 hynet1024 发表于 2022-5-18 22:29
终于弄明确了
1、如果不调整顺序,则要去掉一个{0,1}
2、调换一下顺序,则可以保留{0,1}
因为如果不改变顺序,先匹配 {0,1}\d{0,1}\d{0,1} 时,第一个可以匹配 0 次,那么就只需要匹配后两个数就可满足,后续的就不匹配了直接返回
改变顺序后,先匹配 2 开头的,如果2 开头的不匹配才开始匹配 1、0 开头的,这样就保证了先匹配到更大的,再匹配到小范围的
另外去掉 {0,1} 还是无法正确匹配,如果最后一位小于 100 ,那么也会导致匹配不到,所以还是调换下位置比较何时
多谢指点!
页:
1
[2]