python正则匹配ip地址_python 正则表达式匹配IP地址

一、实验环境

1.Windows7x64_SP1

2.anaconda2.5.0 + python2.7(anaconda集成,不需单独安装)

3.pyinstaller3.0

二、实验目的

从text文本中获取字符串,筛选合法IP地址

2.1 文本内容如下

请输入合法IP地址,非法IP地址和其他字符将被过滤!

增、删、改IP地址后,请保存、关闭记事本!

192.168.8.84

192.168.8.85

192.168.8.86

0.0.0.1

256.1.1.1

192.256.256.256

192.255.255.255

aa.bb.cc.dd

2.2 编写函数读取文本文件,筛选合法IP地址

def get_ip_list(self):

try:

file = open(self.smart_ip_list_file, 'r')

str = file.readlines()

str_del_enter = [x.strip('\n') for x in str] #去除\n

comp = re.compile(r'^((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}')

str_legal_ip = [x for x in str_del_enter if comp.match(x)] #筛选合法IP地址

file.close()

return str_legal_ip

except:

self.ui.textEdit.setText('读取"%s"报错' %(self.smart_ip_list_file))

return []

2.3 代码说明

1.从文本文件中读取所有行,除首行外均以\n结束,如下代码用于去除\n

str_del_enter = [x.strip('\n') for x in str]

2.IP地址的长度为32位(共有2^32个IP地址),分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用句点隔开

根据规则:每段相同,范围都在 0 ~ 255

0~255 对应的正则表达式为 (2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2}

2(5[0-5]|[0-4]\d) 匹配:200 ~ 255

[0-1]?\d{1,2} 匹配:0 ~ 199

0 到 255 的式子已经写出来了,那么一共四段再加上中间的点就很容易了

后边“点”和“数字”重复三次就可以了,(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}

全部合起来,((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}

通过如上正则表达式匹配字符串,存在如下问题

256.1.1.1 -> 匹配结果56.1.1.1

解决方式,如上表达式前面添加^,最终调用compile函数,参数方式如下

comp = re.compile(r'^((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值