python正则匹配ip地址

用正则匹配ip地址
可以将ip地址按区间分类:
0-99 : [1-9]?\d ?表示十位数有1个或无
100-199 : 1\d{2}
200-249 : 2[0-5]\d
250-255: 25[0-5]
前面三位ip都带.,让他们扩张三次。 最后一位ip不带.再来一次

import re
g =' se215.255.255.155 5'
t = re.search(r'(([1-9]?\d|25[0-5]|2[0-4]\d|1\d\d)\.){3}([1-9]?\d|25[0-5]|2[0-4]\d|1\d\d)',g)
print(t.group())

结果是:215.255.255.15
事实上最后一位是155,为什么只得到2个数字?
因为前后的表达式的顺序是有讲究的,如expression1|expression2和expression2|expression1匹配的结果或许存在不同,优先匹配expression1。[1-9]?\d 就优先匹配了15, 而后面的1\d\d就没有匹配155.所以调整顺序

import re
g =' se215.255.255.155 5'
t = re.search(r'(([1-9]?\d|25[0-5]|2[0-4]\d|1\d\d)\.){3}(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)',g)
print(t.group())

结果是:215.255.255.155

前面的三次都可以获取成功是因为加了最后的限定.,使得优先级的条件无法满足.

import re
g =' se215.000.05.115 5'
t = re.search(r'((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}',g)
print(t.group())

215.000.05.115 这可以匹配出中间带多个0的IP

本文链接:https://my.lmcjl.com/post/15284.html

展开阅读全文

4 评论

留下您的评论.