正则表达式——IP地址的匹配

我在中国大学MOOC上学习正则表达式的时候,在学习IP地址的匹配的时候,发现了视频里的匹配IP地址的正则表达式是错误的
IPV0地址分四段,每段数字范围为0-255,段与段之间用英文句点' .'隔开
其中,
250-255: 特点:三位数,百位数是2,十位是5,个位是0-5,用正则表达式可以写成:25[0-5]
200-249: 特点:三位数,百位数是2,十位是0-4,个位是0-9,用正则表达式可以写成:2[0-4]\d
100-199:特点: 三位数,百位数是1,十位,个位是0-9,用正则表达式可以写成:1\d{2}
10-99:特点:二位数,十位是1-9,个位数0-9,用正则表达式可以写成:[1-9]\d
0-9:特点:一位数,用正则表达式可以写成:\d

综上:可以将0-99的正则表达式写成:[1-9]?\d (?表示前一个字符0次或1次扩展)

以上,视频里还是正确的,但是其正则表达式是这样的:
(([1‐9]?\d|1\d{2}|2[0‐4]\d|25[0‐5]).){3}([1‐9]?\d|1\d{2}|2[0‐4]\d|25[0‐5])
我们分解来看
([1‐9]?\d|1\d{2}|2[0‐4]\d|25[0‐5]),这一部分是说匹配数字0-255,咋看起来没错,但是因为 最先开始的匹配拥有最高的优先权,也就是说,对于 202.204.80.112这样的,先匹配的是2而不是202
其次,该表达式中的 . 意味着匹配所有单个字符,这也就说明即使把IP改成 202$204$80$112他也会匹配成功,这明显是不对的

将上述正则表达式验证一下:
他只能匹配到202.204;因为他首先匹配了2接着把0作为单个字符匹配,同理是2. 接着是20 最后是匹配了4(正好是四组)

只需要将正则表达式改成这样:

((1\d{2}|25[0-5]|2[0-4]\d|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)问题即可解决。

代码如下:
import re
right= r'((1\d{2}|25[0-5]|2[0-4]\d|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)'
n=re.search(right, '202.204.80.112' )
print (n.group( 0 ))

#输出:202.204.80.112






  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值