• 正则表达式:元字符(基本可用来匹配的字符)


    1. # 1: 匹配单个字符与数字 . 匹配除换行符以外的任意字符 [0123456789] 是字符集合,表示匹配方括号中所包含的任意一个字符 如[Mia] 匹配'M','i','a'中任意一个字符 [a-z] 匹配任意小写字母 [A-Z] 匹配任意大写字母 [0-9] 匹配任意数字,类似[0123456789] [0-9a-zA-z] 匹配任意的数字和字母,(不分大小写)(不能加空格,否则也匹配空格) [[0-9a-zA-z_] 匹配任意的数字、字母和下划线 [^Mia] 匹配除了'M','i','a'这几个字母(符)以外的所有字符,"^"称为脱字符,表示不匹配集合中的字符,而匹配其它所有的 [^0-9] 匹配所有的非数字字符 [d] 匹配所有的数字,效果同[0-9] [D] 匹配非数字字符,效果同[^0-9] [w] 匹配数字,字母和下划线,效果同[0-9a-zA-z_] [W] 匹配非数字,字母和下划线 [s] 匹配任意的空白符(空格,换行,回车,换页,制表),效果同[ f ] (Windows中回车是 ,换行是 ) Linux中换行是 ,回车是 ,效果一样) [S] 匹配任意的非空白符,效果同[^ f ]

      import re
      print(re.search('.','I love Mia,Mia is my love'))
      out:<re.Match object; span=(0, 1), match='I'>
      
      # [0123456789]是字符集合,表示匹配方括号中所包含的任意一个字符
      print(re.search('[0123456789]','i am a 9'))
      out:<re.Match object; span=(7, 8), match='9'>
      
      print(re.findall('[w]','jdf gh374'))
      out:['j', 'd', 'f', 'g', 'h', '3', '7', '4']
      
      print(re.findall('.','34j
      lf gdj',flags=re.S))
      out:['3', '4', 'j', '
      ', 'l', 'f', ' ', 'g', 'd', 'j']

             2. 

      

    #      2:     锚字符(边界字符)
    
    ^          行首匹配,和在[]里的^不是一个意思,即和[^]不同
    $          行尾匹配
    A         匹配字符串开始,它和^的区别是,'A'只匹配整个字符串的开头,即使在re.M模式下也不会其他行的行首
             匹配字符串结束,它和$的区别是,''只匹配整个字符串的结尾,即使在re.M模式下也不会其他行的行尾
             匹配一个单词的边界,也就是单词和空格间的位置(空格),如'er'可以匹配never,不能匹配nerve
    B         匹配非单词边界,如'er'可以匹配nerve,不能匹配never
    
    
    print(re.search('^Mia','Mia is my love'))
    print(re.search('Mia$','Mia is my love,Mia'))
    print(re.search('^Mia$','Mia is my love,Mia'))
    out:
    <re.Match object; span=(0, 3), match='Mia'>
    <re.Match object; span=(15, 18), match='Mia'>
    None
    
    
    print(re.findall('^Mia','Mia is my love
    Mia is my love',re.M))
    print(re.findall('AMia','Mia is my love
    Mia is my love',re.M))
    out:
    ['Mia', 'Mia']
    ['Mia']
    
    
    print(re.findall('Mia$','Mia is my love,Mia
    Mia',re.M))
    print(re.findall('Mia','Mia is my love,Mia
    Mia',re.M))
    out:
    ['Mia', 'Mia']
    ['Mia']
    
    
    print(re.search('er','never'))
    out:None
    
    
    print(re.search(r'er','never'))
    print(re.search(r'er','nerve'))
    print(re.search(r'erB','never'))   
    print(re.search(r'erB','nerve'))
    # 加“r”是防止转义!
    out:
    <re.Match object; span=(3, 5), match='er'>
    None
    None
    <re.Match object; span=(1, 3), match='er'>

    3.

    #     3:    匹配多个字符
    说明:下方的x、y、z均为假设的普通字符,m、n是非负整数,不是正则表达式的元字符
    (xyz)     匹配小括号内的xyz(作为一个整体去匹配)
    x?        匹配0个或者1个x
    x*        匹配0个或者任意多个x (.* 表示匹配任意0个或者任意多个字符(换行符除外)
    x+        匹配至少一个x
    x{n}      匹配确定的n个x(n是一个非负整数)
    x{n,}     匹配至少n个x
    x{n,m}    匹配至少n个,最多m个x 注意:(n<=m)
    x|y       |表示或,匹配的是x或y
    
    
    print(re.findall(r'(Mia)','Mia is a good girl,Mia loves me'))
    out:
    ['Mia', 'Mia']
    
    print(re.findall(r'o?','Mia is a good girl,Mia loves me')
    out:['', '', '', '', '', '', '', '', '', '', 'o', 'o', '', '', '', '', '', '', '', '', '', '', '', '', 'o', '', '', '', '', '', '', '']
    
    
    print(re.findall(r'o*','oooo'))
    print(re.findall(r'o?','oooo'))    #  贪婪匹配,尽可能少的匹配
    print(re.findall(r'o*','ooowwoo'))  # 贪婪匹配,尽可能多的匹配
    print(re.findall(r'.*','ooowwoo'))
    out:
    ['oooo', '']
    ['o', 'o', 'o', 'o', '']
    ['ooo', '', '', 'oo', '']
    ['ooowwoo', '']
    
    
    print(re.findall(r'o+','ooowoo'))   # 贪婪匹配,尽可能多的匹配
    out:['ooo', 'oo']
    
    
    print(re.findall(r'o{4}','ooowo'))
    print(re.findall(r'o{4}','oooo'))
    print(re.findall(r'o{4}','ooooo'))
    print(re.findall(r'o{4}','ooo'))
    print(re.findall(r'o{4}','oooowooooo'))
    out:
    []
    ['oooo']
    ['oooo']
    []
    ['oooo', 'oooo']
    
    
    print(re.findall(r'o{3,}','ooooo'))
    print(re.findall(r'o{3,}','ooo'))
    print(re.findall(r'o{3,}','oo'))
    print(re.findall(r'o{3,}','oobooo'))
    out:
    ['ooooo']
    ['ooo']
    []
    ['ooo']
    
    
    print(re.findall(r'o{3,6}','oobooo'))
    print(re.findall(r'o{3,6}','oooobooo'))
    out:
    ['ooo']
    ['oooo', 'ooo']
    
    
    print(re.findall(r'(m|M)ia','mia--Mia'))
    print(re.findall(r'((m|M)ia)','mia--mia--Mia'))   # 打印出来是“组”
    out:
    ['m', 'M']
    [('mia', 'm'), ('mia', 'm'), ('Mia', 'M')]
    
    
    # 需求:提取
    import re
    str = 'Mia is a good girl!Mia is a nice girl!Mia is a beautiful girl'
    print(re.findall(r'^Mia.*girl$',str))
    out:
    ['Mia is a good girl!Mia is a nice girl!Mia is a beautiful girl']

    4.

    #     4:    特殊
    *?  +?   x? 最小匹配,通常都是尽可能多的匹配,可以这种加?的方式解决贪婪匹配
    光*和+代表贪婪匹配
    (?:x)       类似(xyz),但不表示一个组合
    
    print(re.findall(r'a?','aaa'))
    out:['a', 'a', 'a', '']
    
    
    import re
    str = 'Mia is a good girl!Mia is a nice girl!Mia is a beautiful girl'
    print(re.findall(r'^Mia.*?girl$',str))
    print(re.findall(r'Mia.*?girl',str))
    print(re.findall(r'Mia.*girl',str))
    out:
    ['Mia is a good girl!Mia is a nice girl!Mia is a beautiful girl']
    ['Mia is a good girl', 'Mia is a nice girl', 'Mia is a beautiful girl']
    ['Mia is a good girl!Mia is a nice girl!Mia is a beautiful girl']
    
    
    标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。
    反斜杠本身需要使用反斜杠转义。
    由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素(如 r'	',等价于 \t )匹配相应的特殊字符。
    
    
    # 注释 : /*  part1  */     /*  part2  */
    print(re.findall(r'//*.*/*/',' /*  part1  */  /*  part2  */'))   # 标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。如*,需/*,把*转义,才表示单纯的符号*
    
    out:['/*  part1  */  /*  part2  */']

    作者:chauncylii

    出处:https://www.cnblogs.com/passengerlee/p/11965398.html

    版权:本文采用「署名-非商业性使用-相同方式共享 4.0 国际」知识共享许可协议进行许可。

    觉得文章不错,点个关注呗!

  • 相关阅读:
    (九)栈上分配与逃逸分析
    (八)内存分配策略
    (七)垃圾收集器
    (六)垃圾回收算法
    (五)垃圾回收之判定垃圾对象
    (四)java对象的结构和对象的访问定位
    (三)java虚拟机内存管理和线程独占区和线程共享区
    Spark SQL1.2与HDP2.2结合
    待整理
    Ambari部署HDP:HBase Master启动后自动消失
  • 原文地址:https://www.cnblogs.com/passengerlee/p/10961223.html
Copyright © 2020-2023  润新知