正则精准匹配IP的问题

经常会碰到匹配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'
>>>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值