正则精准匹配IP的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Jerry_1126/article/details/85221105

经常会碰到匹配IP的问题,很多时候用粗略点方式,比如

\d{3}\.\d{3}\.\d{3}\.\d{3}

使用上面的就可以匹配,但有时候,要准确匹配的话,上面的显然就不行比如999.10.10.10显然就不是IP地址

(1-255).(0-255).(0-255).(0-254)上面四个其实还是正则的准匹配。

具体而言

  • 百位: 25[0-5]|24[0-9]|1\d{2}  或者 25[0-4]|24[0-9]|1\d{2} 
  • 十位: [1-9]\d{1}
  • 个位: 0-9或者1-9

综合起来就是:

(((25[0-5])|(24\d{1})|(1\d{2})|([1-9]\d{1})|([1-9]))(\.((25[0-5])|(24\d{1})|(1\d{2})|([1-9]?\d{1}))){2}\.((25[0-4])|(24\d{1})|(1\d{2})|([1-9]\d{1}))$)

比如说下面的例子,使用上面的正则就可以精准的匹配到IP地址了!

>>> import re
>>> s = '/a/b?ip1=0.1.2.3abvip=222233334444?ip2=255.10.10.255,ip3=10.10.10.255,ip4=10.10.10.254'
>>> p = re.compile(r"(((25[0-5])|(24\d{1})|(1\d{2})|([1-9]\d{1})|([1-9]))(\.((25[0-5])|(24\d{1})|(1\d{2})|([1-9]?\d{1}))){2}\.((25[0-4])|(24\d{1})|(1\d{2})|([1-9]\d{1}))$)")
>>> p.findall(s)[0][0]
'10.10.10.254'
>>>

猜你喜欢

转载自blog.csdn.net/Jerry_1126/article/details/85221105