美文网首页
3.系统模块中-re

3.系统模块中-re

作者: 芝麻酱的简书 | 来源:发表于2018-08-15 15:46 被阅读10次

    元字符:. ^ $ * + ? {} [] | () \ 11个符号的使用


    ①通配符.

    除了换行符,其他都可以匹配到

    import re
    
    str1 = "abcedafeafasdfaeaxdefae2134wsfdasedf32af"
    # 匹配 "a**e"格式的字长为4的字符串
    result = re.findall("a..e",str1)
    print(result)
    


    ②以什么开头^
    str1 = "abcedafeafasdfaeaxdefae2134wsfdasedf32af"
    # 匹配以a开头格式为a**e的字符串
    result = re.findall("^a..e",str1)
    


    ③以什么结尾$
    # 匹配以a**e为结尾的字符串
    result = re.findall("a..e$", str1)
    


    ④转义符\
    • 反斜杠\后面跟上元字符,去取其特殊功能
    • 反斜杠\后面更上普通字符,实现特定功能:
      \d 匹配任何十进制数,相当于[0-9]
      \D 匹配任何 数字字符,相当于[^0-9]
      \s 匹配任何空白字符, 相当于[\t\n\r\f\v]
      \S 匹配任何 空白字符, 相当于[^ \t\n\r\f\v]
      \w 匹配任何字母数字字符,相当于[a-zA-Z0-9]
      \W 匹配任何 字母数字字符,相当于[^ a-zA-Z0-9]
      \b 匹配一个特殊字符边界,比如空格、&、#等

    demo1:使用r来表示raw字符串,不让python解释器转义,直接将正则表达式交给re模块

    result1 = re.findall(r"c\\e", "abc\efrwt")
    print(result1)
    
    

    demo2:使用多个\来解决python解释器转义

    # 两个反斜杠,会被解释器转义成一个,四个反斜杠就转义成2个交给re模块
    result1 = re.findall("c\\\\e", "abc\efrwt")
    print(result1)
    
    


    ⑤匹配重复 - 四种* + ? {}
    1. * 重复匹配前一个字符 0到无穷次 --- 贪婪匹配
    str1 = "ddddadbaddddd"
    result = re.findall("^d*", str1)
    
    1. + 重复匹配前一个字符 1到无穷次 --- 贪婪匹配

    demo:

    str1 = "bihaha"
    result1 = re.findall("bil*", str1)
    result2 = re.findall("bil+", str1)
    print(result1)
    print(result2)
    # 打印结果
    # ['bi']
    # []
    
    1. ?匹配前一个字符 0次或者1次 --- 贪婪匹配
    str1 = "billhaha"
    result1 = re.findall('bi?', str1)
    
    1. {}自定义重复次数 --- 贪婪匹配
      {0,} 代表0到无穷次
      {0,1} 代表0到1次
      {6} 代表重复6次
      所以{}可以代替前三种重复符号
    str1 = "billhaha"
    result1 = re.findall('bil{4}', str1)
    
    注意:

    在上面四种重复匹配符后面加?,可以使其由 贪婪匹配 变为 惰性匹配

    str1 = "billhaha"
    result1 = re.findall('bil+?', str1)
    


    ⑥字符集[]
    #匹配由a*b组成的字符串
    result1 = re.findall('a[zxc]b', 'azbacv')
    

    在字符集[]符号中,只有- ^ \三种符号有特殊意义,其他元字符按照普通字符来匹配:

    1. []中使用-,用来表示范围
      [a-z]
      [A-Z]
      [0-9]
      按照ASCII码来寻找范围
    result1 = re.findall('a[a-z]b', 'azb')
    
    result1 = re.findall('a[a-z]*', 'azbasdfasdfa3')
    # 结果是['azbasdfasdfa']
    
    
    
    1. []中使用^,表示非
    result1 = re.findall('a[^a-z]', 'azbasdfasdfa3')
    # 输出结果[a3]
    
    1. []使用\表示转义符


    ⑦管道符|

    代表 或者 的意思

    result1 = re.findall(r"123a|b", "adf123abc")
    # 结果是 ['123a', 'b']
    


    ⑧小括号()

    分组

    result1 = re.findall(r"(123)+", "adf123333abc")
    # 结果['123']
    




    相关文章

      网友评论

          本文标题:3.系统模块中-re

          本文链接:https://www.haomeiwen.com/subject/wxdwbftx.html