• python基础之正则表达式。


    简介

      就其本质而言,正则表达式是内嵌在python内,由re模块实现,小型的专业化语言,最后由c写的匹配引擎执行。正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。

      正则的字符分为普通字符和元字符,普通字符比如“aaa”等,元字符是  .  ^  $  *  +  ?  ()  []  {}  |    这里它们都有特殊的含义

      判断一个字符串或者字符是否在另一个字符串内,如果是以列表形式返回这个这个字符或者字符串,否则为空列表

    import re
    a = re.findall("abc","aweffabcsefwse")
    print(a)
    
    ['abc']

      如果字符串里有.的话,则代表可以匹配除了换行符之外的任何一个字符,.为通配符。

    import re
    a = re.findall("ab.c","aweffabbcsefwse")
    print(a)
    
    ['abbc']

      “^”查看第二个字符串是否以第一个字符串或者字符开头

    import re
    a = re.findall("^abc","abcffabbcsefwse")
    print(a)
    
    ['abc']

      “$”,查看第二个字符串是否以第一个字符串或者字符结尾

    import re
    a = re.findall("abc$","ffabbcsefwseabc")
    print(a)
    
    ['abc']

      “*”这个加在字符串后边,对自己前边的字符进行控制,可以匹配0到多次*前的一个字符

    
    
    import re
    a = re.findall("abdc*","cghguabdcccc")
    print(a)

    ['abdcccc']
     

       “+”这个加在字符串后边,对自己前边的字符进行控制,可以匹配1到多次+前的一个字符,用法同“*”

      “?”这个加在字符串后边,对自己前边的字符进行控制,可以匹配0到1次?前的一个字符,用法同“*”

      "{}"对自己前边的一个字符匹配n次,n为随机整数,大括号内可有俩参数,表示匹配n到m次,如果匹配次数不足返回空列表,如果超出,返回最大的匹配次数基本用法如下

    import re
    a = re.findall("abdc{3}","cghguabdccccc")
    print(a)
    
    ['abdccc']

       “[]”中括号里的为一个字符集,只需要匹配到其中一个字符就为真,有种或者的意思,如果把元字符放里边,部分元字符会变成普通字符,比如.在这里为普通字符,^则变成了取反,用法

    import re
    a = re.findall("a[bd]c","cghguadc")
    print(a)
    
    ['adc']

         反斜杠,反斜杠后边跟元字符去除其特殊功能,跟普通字符实现特殊功能,引用序号对应的字组所匹配的字符串,它在字符集里依然有特殊功能

     匹配一个单词边界,也就是指单词和空格间的位置。例如,“er”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。 
    B 匹配非单词边界。“erB”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。
    cx 匹配由x指明的控制字符。例如,cM匹配一个Control-M或回车符。x的值必须为A-Z或a-z之一。否则,将c视为一个原义的“c”字符。
    d 匹配一个数字字符。等价于[0-9]。
    D 匹配一个非数字字符。等价于[^0-9]。
    f 匹配一个换页符。等价于x0c和cL。
    匹配一个换行符。等价于x0a和cJ。
    匹配一个回车符。等价于x0d和cM。
    s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[f v]。
    S 匹配任何非空白字符。等价于[^f v]。
    匹配一个制表符。等价于x09和cI。
    v 匹配一个垂直制表符。等价于x0b和cK。
    w 匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。
    W 匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。
      简单演示一个
    import re
    a = re.findall("d","cghgua1dc2")
    print(a)
    ['1', '2']

       “()”这个和数学里的概念类似,就是把表达式部分封装起来作为一个整体,也就是分组,

    import re
    a = re.search("a(d+)","cghgua12dc").group()
    print(a)
    a12

       如果括号两边均有限定条件,则为贪婪模式,否则取最小值,两侧都有限定条件如下

     
    import re
    a = re.search("a(d+?)b","a15455b").group()
    print(a)
    a15455b
    
    

      无限定条件示例,示例中,+与?的最小匹配次数为1,所以结果是a1

    import re
    a = re.search("a(d+?)","a15455b").group()
    print(a)
    a1

       正则中sub替换方法的使用,在最后可以加一个参数,表示要替换多少次。

    import re
    a = re.sub("g.t","have","i get a i got b")
    print(a)
      
    i have a i have b

      subn,替换,并显示替换多少次

    import re
    a = re.subn("g.t","have","i get a i got b")
    print(a)
    ('i have a i have b', 2)

      

    compile方法,可以将某一个规则封装进一个对象,然后进行别的方法调用
    import re
    txt = "he is good boy"
    a = re.compile("w*oow*")
    print(a.findall(txt))
    ['good']

      分割字符的方法split,因为1和4位置会做分割所以边上多出俩空格,规则前加r是为了让r后边的字符串以re模块的方式处理,而不会是python,因为python的

    和正则的有时候会有冲突,建议添加r,保证正则少出错误。

    import re
    txt = "1one2two3three4"
    a = re.compile(r"d+")
    print(a.split(txt))
    ['', 'one', 'two', 'three', '']

       “|”为或者的意思,类似or

    import re
    a = re.findall(("abc|adc"),"adc")
    print(a)
    ['adc']
    去除findall优先获取组的内信息的方法?:不加的话默认只返回组内的adc
    import re
    a = re.findall("www.(?:abc|adc).com","www.adc.com")
    print(a)
    ['www.adc.com']
    
    

     match,匹配字符串的头部,如果成功返回一个对象,否则返回none

     search,匹配整个字符串,匹配到一个之后返回,否则none

     findall,匹配全部,获取非重复的匹配列表;如果有一个组则以列表形式返回,且每一个匹配均是字符串;如果模型中有多个组,则以列表形式返回,且每一个匹配均是元祖,空的匹配也会包含在结果中

     
  • 相关阅读:
    主流编程语言
    计算机语言
    IT(Information technology)
    设计模式-学习
    Java 执行顺序
    学习大纲
    Springboot注解整理 二《自定义注解》
    IntelliJ IDE 基础经验备案三
    IntelliJ IDE 基础经验备案二
    Mybatis使用经验归档
  • 原文地址:https://www.cnblogs.com/kading/p/5577865.html
Copyright © 2020-2023  润新知