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

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

以这条表达式为例:

爬虫正.png     

其中最前面的   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])

你可能感兴趣的:(Python 正则表达式匹配ip格式详解)