zoukankan      html  css  js  c++  java
  • 正则表达式

    什么是模块

       1   容器,例如列表,元组,字符串等等,这些是对数据的封装。函数是对语句的封装。模块,就是程序,模块就是平时写的任何代码,保存的每一个.py结尾的文件,都是一个独立的模块。

       2   把这个文件保存起来的时候,他就是一个独立的模块了。(为了让默认的IDLE可以找到这个模块,需要把这个文件放在python安装的目录下。)这时就可以在IDLE中导入模块。

       3   命名空间(Namespace)表示标识符(identifier)的可见范围。一个标识符可以在多个命名空间中定义,他在不同命名空间中的含义是互不相干的。

       4   模块的分类:模块的分类分为三种。

                (1) 内置函数:python中,安装好了Python后,本身就带有的库,就叫做Python的内置的库。内置模块,也被称为Python的标准库。

                (2) 第三方模块:而非Python本身自带的库,就是所谓的第三方的库。

                (3) 自定义模块:自己给自己定义的模块。

     import的介绍

        1  在python用import或者from...import来导入相应的模块。模块其实就是一些函数和类的集合文件,它能实现一些相应的功能,当我们需要使用这些功能的时候,直接把相应的模块导入到我们的程序中,我们就可以使用了。

        2  直接import,但在调用模块中函数的时候,需要加上模块的命名空间。如果导入方法直接将模块的命名空间覆盖进来,所以在调用的时候也就不需要加上命名空间了(尽量不要使用这种方法,因为这样会使得命名空间荡然无存,一不小心还会陷入名字混乱的局面)。

    一 正则表达式和re模块

         就其本质而言,正则表达式(或 RE)是一种小型的、高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。

     1 什么叫做正则表达式:这则表达式是字符串的一种筛选规则

     2 正则表达式的好处:1,1匹配:检测字符串是否符合正则表达式的规则,否则返回False。

               1,2 切割:按照一定的规则将字符串分割成多个字符串。

               1,3替换:将字符串中的字符替换成指定的字符。

               1,4获取:获取与规则子符相符的字符: 步骤:① 将正则封装成正则;② 正则表达式和要操作的字符相关联,获得匹配对象;③ 获取正则表达式的匹配引擎;④ 通过引擎对福和规格的字符进行操作。

     正则里的一些常用操作:

      

    不同的语言均有使用正则表达式的方法,python中是用re模块实现的。

    使用的方法格式:变量名=re.re中的其中一个子模块("规则","内容")

    元字符

    1   .(点) :可以代替除换行符以外任意一个元素

    1 # ret=re.findall("方..","方杰,方合意,方磊,光东,阿杰,李杰,方何军")    ##匹配出所有符合条件的元素
    2 # print(ret)

    2  ^  :匹配第一个 元素的类容,匹配不成功,也不会去匹配后面的元素

    # ret=re.findall("^方.","方杰,方合意,方磊,光东,阿杰,李杰,方何军")   #匹配出所有符合条件的元素
    # print(ret)

    3 $ :匹配该对象的最后一个内容,不会去匹配其他位置的内容

     ret=re.findall("y..n$","方杰,方合意,方磊,光东,阿杰,李杰,方何军yuan")   #匹配出所有符合条件的元素
    # print(ret)

    4 * :匹配表达式内容的0次到无数次

    #ret=re.findall("333d*","333234214455,333255654534246,545556564367656653,4453576489780423")
    # print(ret)

    5 + : 匹配表达式内容的1次到无数次

    #ret=re.findall("333d+","3334214455,333255654534246,333,56564367656653,4453576489780423")
    # print(ret)

    6 ?: 匹配表达式内容的0次或者1次

    # ret=re.findall("d?","2342,43,7654,87")
    # print(ret)

    7 {}:自定义次数

    #ret=re.findall("d{16}","234214455,663255654534246,545556564367656653,4453576489780423")
    # print(ret)

    *,+都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配

    # ret=re.findall('131d+?','1312312312')
    # print(ret) 

    匹配一个数字包括整型和浮点型

    # ret=re.findall("d+.?d+","3555,8498,64.674,2344")
    # print(ret)

    转义符

    1 反斜杠后面跟元字符,会去掉特殊的功能

    # ret=re.findall(".com","www.baidu.com,www.youji.com,www.xiongdi.com,www.ss.cn")
    # print(ret)

    2 反斜杠后面加上一些普通字符会实现一些特殊的功能

    d 匹配任何十进制数; 它相当于类 [0-9]。

    # ret=re.findall("d","yuan3236$655&34")
    # print(ret)

    D 匹配任何非数字字符; 它相当于类 [^0-9]。

    # ret=re.findall("D","yuan3236$655&34")
    # print(ret)

    s 匹配任何空白字符; 它相当于类 [ fv]。

    # ret=re.findall("s","hello i love like")
    # print(ret)

    S 匹配任何非空白字符; 它相当于类 [^  fv]。

    # ret=re.findall("S","hello i love like")
    # print(ret)

    w 匹配任何字母数字字符; 它相当于类 [a-zA-Z0-9_]。

    复制代码
    # ret=re.findall("w","yuan323665534")
    # print(ret)
    
    
    # ret=re.findall("w+","yuan323665534")
    # print(ret)
    复制代码

    W 匹配任何非字母数字字符; 它相当于类 [^a-zA-Z0-9_]

    # ret=re.findall("W","yuan3236$655&34")
    # print(ret)

     匹配一个特殊字符边界,比如空格 ,&,#等是特殊符号所以前面需要加r

    # ret=re.findall(r"i","hello i love like")
    # print(ret)
    
    # ret=re.findall(r"i","hello i love li$ke")
    # print(ret)

    分组  ()

    复制代码

    ret=re.findall("(fang)","fangffksdl;hfangfangfnag") # print(ret) # # ret=re.findall("(fang)+","fangffksdl;hfangfangfnag") # print(ret)
    # ret=re.findall("方","方杰,方合意,方磊,光东,阿杰,李杰,方何军")    ##匹配出所有符合条件的元素
    # print(ret) m = re.findall(r'(ad)+', 'add') print(m) ret=re.search('(?P<id>d{2})/(?P<name>w{3})','23/com') print(ret.group())#23/com print(ret.group('id'))#23



    #命名分组
    ret=re.search(r"blog-aticles-(?P<year>20[01]d)-(d+)","blog-aticles-2005-12")
    print(ret.group('year'))

    ret=re.search(r"blog-aticles-(?P<year>20[01]d)-(?P<mansh>d+)","blog-aticles-2005-12")
    print(ret.group('mansh'))
    复制代码

    字符集  |

    字符集 | 或者的意思 要配合 ()用的

    # ret=re.findall("www.(w+).(com|cn)","www.baidu.com,www.youji.com,www.xiongdi.com,www.ss.cn")
    # print(ret)
    
    # ret=re.findall("www.(?:w+).(?:com|cn)","www.baidu.com,www.youji.com,www.xiongdi.com,www.ss.cn")
    # print(ret)

    字符集  []

    字符集[]:  在[]里面多选一的效果  一个字符集只匹配一个字符
    复制代码
    # ret=re.findall(r"a[bc]","abcjpofdabhiac")
    # print(ret)
    
    # ret=re.findall(r"a[bc]d","abdcjpofdabhiacd")
    # print(ret)
    
    # ret=re.findall(r"a[b.c]d","abcjpofdabhia.dc")
    # print(ret)
    复制代码
    字符集里面只有三个特殊符号:- ^ 
    
    
    复制代码
    # ret=re.findall(r"[0-9]","ds1246634347cvkdhsd")
    # print(ret)
    #
    #
    # ret=re.findall(r"[a-z]","ds1246634347cvkdhsd")
    # print(ret)
    #
    # ret=re.findall(r"[A-Z]","ds1246DSJFKS47cvkdhsd")
    # print(ret)
    #
    # ret=re.findall(r"[A-Za-z0-9]","ds1246634347cvkdhsd")
    # print(ret)
    
    # ret=re.findall(r"a[d]c","ds12a34c7cvkdhsd")
    # print(ret)
    
    
    # ret=re.findall(r"[^d]","ds1246634347cvkdhsd")
    # print(ret)
    
    
    # ret=re.findall(r"[^da-z]","ds1246634347cvk#dhsd")
    # print(ret)
    复制代码
    
    

    search  函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,没有则会则返回None,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,就会报错

    复制代码
    #只有匹配到了一项内容就不会在继续匹配了
    ret=re.search("(fang)+","fangffksdl;hfangfangfnag")
    print(ret)
    print(ret.group())
    
    #没有匹配内容则会返回None,group()则会报错报错
    ret=re.search("(fakl)+","fangffksdl;hfangfangfnag")
    print(ret)
    print(ret.group())
    复制代码

    match  函数会在字符串开始位置查找模式匹配对象,没有则会则返回None,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,就会报错

    复制代码
    #match  只匹配字符串开头的位置
    # ret=re.match("(fang)+","fangffksdl;hfangfangfnag")
    # print(ret)
    # print(ret.group())
    
    #开头位置匹配不上就会报错
    # ret=re.match("(fang)+","sdffangffksdlaihngfangfnag")
    # print(ret)
    # print(ret.group())

      3 非贪婪匹配:

       什么是贪婪匹配:在匹配时,按照最多的匹配,能匹配多少就匹配多少。

       什么是非贪婪匹配:在匹配中,按照最少的匹配。关键字?:就是在匹配的字符后面加上?(问号),这个问号就是匹配的最少。

      4 转义符::将一些普通的字符加上会有特殊的意义,同时将特殊的符号可以加上,变成普通的字符。

        r:在字符串的前面加上r,特殊的符号也会变成字符串中的字符。

     re模块里的常用操作:

      findall:有几个就匹配几个,以列表的格式返回没有返回的内容,就会返回一个空的列表,优先匹配分组,加上?:取消优先匹配。

    print(re.findall('d+','432j5h52klk'))
    

      search:返回匹配到的第一个福和规则的字符,必须要用group来调用

    
    
    # print(re.search('fa.','sddasfanewvgfsfang').group())
    

      match:只能去匹配第一个,有符合规则就返回,没有就会报错。也要用group来调用。

    # print(re.match('f.','fangdsfdskjiefang').group())   #正确
    # print(re.match('f.','dufdfangewfang').group())  #报错
    

      split:分割:以规格匹配的内容为分隔符,如果加上()分组,还会显示分割符。

    # print(re.split('fang','yifangjie'))
    # print(re.split('(fang)','yifangjie'))
    

      sub:替换:还可以指定替换的的次数

    # print(re.sub('jie','fang','jiejiefangjieyi'))   #不指定次数,默认只要符合规则就替换
    # print(re.sub('jie','fang','jiejiefangjieyi',2))   #指定替换词数
    

      subn:替换:返回符合规则的字符,同时还回替换次数。

    # print(re.subn('jie','fang','fangjiejiefangyijei'))
    

      compile:将正则表达式编译,同时可以多个同时调用。

    # ret=re.compile('d{5}')
    # print(ret.findall('dsa543545dsfrdadf452423'))
    # print(ret.findall('faf32225vsdf56556354gdsd'))
    

      finditer:返回一个迭代器。

    # ret=re.finditer('d{3,7}','sdfdas1453cdsf2423423')
    # for i in ret:
    #     print(i.group())
    
  • 相关阅读:
    奇异值分解
    特征值和特征向量
    矩阵
    矢量化
    符号数组
    通用函数
    数据平滑
    多项式拟合
    协方差/相关矩阵/相关系数
    json
  • 原文地址:https://www.cnblogs.com/fangjie0410/p/7506045.html
Copyright © 2011-2022 走看看