zoukankan      html  css  js  c++  java
  • 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('
    ') for x in str]                                                            #去除
    
                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.从文本文件中读取所有行,除首行外均以 结束,如下代码用于去除

    str_del_enter = [x.strip('
    ') 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}')
    

      

      

  • 相关阅读:
    php一些实用的自制方法
    php商城数据库的设计 之无限分类
    thinkphp的where 之 or的使用
    thinkphp 接收文件并处理
    thinkphp验证器
    Html中文字过多,单行超出和多行超出显示省略号
    THINKPHP 模板上传图片--后台接收图片
    UIStackView,真正的自动布局
    iOS 为什么有的APP,没有在Devices显示出来?
    访问iOS APP的8080端口服务
  • 原文地址:https://www.cnblogs.com/hester/p/11223948.html
Copyright © 2011-2022 走看看