Python 正则表达式匹配ip格式详解

来源:互联网 发布:2017淘宝双11技术汇总 编辑:程序博客网 时间:2024/06/06 01:25

以这条表达式为例:


r'(([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.){3}([01]\d{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])



其中最前面的   r'   防止转义影响到我们的正则表达式;

我们知道ip段的单个值的范围是0-255,该表达式匹配时把它分为3部分来匹配,即0-199,200-249,250-255,并用   |   来表示这三个数段中的任意一段为真即为真(成功匹配)。


第一个   |   前的   [01]{0,1}\d{0,1}\d   用来匹配0-199;

[01]表示第一位数可以是0也可以是1,后面的{0,1}表示至少匹配0次,需要匹配1次;再后面的\d代表着第二位数可以是0-9中的任意一个数,同样的后面的{0,1}表示最少匹配0次,需匹配1次,这是考虑到人们在书写ip地址时几乎不会用001这样的写法,譬如不写192.168.0.001,而是写作192.168.0.1;最后用\d第三位数为任意的一位个位数字,即0-9。


第二个   |   前的   2[0-4]\d   则用来匹配200-249这个范围的数值;

开头的2代表着它的最高位为2,[0-4]即第二位数的取值范围在0到4,\d即0-9;


后面的   25[0-5]   就更好理解了:250-255的数值。



合起来就是   [01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5]   ,但这还不够,因为我们的ip地址通常是由4段这样的数值构成的,由于每段数值中间用   .   (小数点)隔开,即xxx.xxx.xxx.xxx。

形象一点表示是这样的:(0-255).(0-255).(0-255).(0-255)   所以在后面我们要再匹配上小数点,即把前面的内容括起来加小数点匹配三次,实现(0-255).(0-255).(0-255)。

即:

(([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.)

注意括号划分优先级。


最后再加上一个(0-255)就行了,即 ([01]\d{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])




以上仅供参考正则表达式的匹配方式,可能存在细节上的纰漏,欢迎指正和交流。

关于Python3正则表达式的更多内容可以参考小甲鱼老师的这篇文章:

http://bbs.fishc.com/thread-57691-1-1.html

原创粉丝点击