Python3正则表达式第二课

1.元字符总结
        匹配单个字符:a  .  \d  \D   \w  \W  \s  \S  [...]  [^...]
        匹配重复性 : *   +   ?  {N}  {m,n}
        匹配某个位置 : ^   $   \A  \Z   \b  \B

        其他 :  |   ()  \

        练习
            匹配长度8-10位的密码 必须以数字开头,数字字母下划线组成
                ^[0-9]\w{7,9}$


2.转义字符
        正则表达式特殊符号 :
        .   *   ?   $  ''   ""   []  {}  ()   \  ^

        如果想匹配特殊符号则加转义  \"\.\"   ----->  "."

         r ---> raw  原生字符串 : 不进行转义

>>> import re
>>> re.findall(r"\bis", ''This is'')
['is']


3.贪婪和非贪婪
        正则表达式默认的重复匹配模式 : 贪婪模式
        尽可能多的向后匹配

        贪婪元字符:       *      +     ?  {m,n}

>>> re.findall("ab+",' abbbbbbbbcded')
['abbbbbbbb']
>>> re.findall("ab*",' abbbbbbbbcded')
['abbbbbbbb']
>>> re.findall("ab?",'abbbabaacded')
['ab', 'ab', 'a', 'a']
>>> re.findall("ab{2,5}",'abbbbbbbbcded')
['abbbbb']

     非贪婪模式  : 尽可能少的匹配内容,满足正则表达式含义即可

    非贪婪元字符:   *?   +?  ??  {m,n}?

>>> re.findall("ab*?",'abbbbbbbbcded')
['a']
>>> re.findall("ab+?",'abbbbbbbbcded')
['ab']
>>> re.findall("ab??",'abbbbbbbbcded')
['a']
>>> re.findall("ab{2,5}?",'abbbbbbbbcded')
['abb']

4.正则表达式分组
    使用()可以为一个正则表达式建立一个子组,子组可以看做内部的整体
5.子组的作用
  1. 增加子组后对正则表达式整体的匹配内容没有影响
  2. 子组可以改变重复元字符的重复行为
  3. 子组在某些操作中可以对子组匹配内容单独提取

6.子组的注意事项
    1.每个正则表达式可以有多个子组,由外到内由左到右为第一第二。。。。子组
    2.子组通常不要交叉

7.捕获组和非捕获组(命名组和非命名组)
    子组命名格式
        (?P<name>abc)
    1.很多编程接口可以直接通过名字获取子组匹配内容
    2.捕获组中的正则表达式可以通过名字重复调用
    (?P=name)

    (?P<dog>ab)cdef(?P=dog) -----> abcdefab

>>> re.search('(ab)+','ababababab').group()
'ababababab'
>>> re.search('(?P<dog>ab)cdef(?P=dog)','abcdefabcde').group()
'abcdefab'

猜你喜欢

转载自blog.csdn.net/dayu_luoyouyan/article/details/80544592
今日推荐