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

    正则表达式

    1. 匹配一个字符

    说明 表达式 等价表达式
    数字 d [0-9]
    字母、数字、下划线 w [a-zA-Z0-9_]
    除换行外任意字符 .  
    空格 s [ fv]
    除数字 D  
    除字母、数字、下划线 W  
    除空格 S  

     2. 集合

    表达式 说明
    [abc][a-g] []指一个集合,匹配[]中的任意一个
    [^A] ^在集合[]开头,匹配除A以外字符
    A|B 匹配A或B表达式
    (A) ()指一个组,匹配A中所有内容

    3. 重复

    表达式 说明
    a? 贪心地匹配a 0次或1次(贪心表示尽可能多地)
    a{m, n} 信心地匹配a m-n次。{,n}:0-n次 {m,}:m-无限次
    a* 贪心地匹配a 0-无限次
    a+ 贪心地匹配a 1-无限次
    a??  a*?  a+? a{m,n}? 尽可能少地匹配

    4. 匹配位置

    表达式 说明
    ^... 要求匹配给定串的开头
    ...$ 要求匹配给定串的结尾
    ...

    匹配单词边界,匹配成功要求A匹配到给定串的边界

    使用时模式串要用r,因为还有其它意义

    ...B 匹配单词非边界
    A... 要求匹配给定串的开头
    ... 要求匹配给定串的结尾

    5. 设置标志

    表达式 说明
    (?aiLmsux)

    (?)是固定格式,后面的字母代表不同意思。

    a(ASCII),i(IGNORECASE),L(LOCALE),

    m(MULTILINE,^和$会匹配每一行的开头和结尾),

    s(DOTALL,不用的时候.不能匹配换行符),u(),

    x(VERBOSE,可以在pattern里面换行写注释,

    如a = re.compile(r"""d +  # the integral part .    

                                           # the decimal point d *  

                                           # some fractional digits""", re.X),

    #用来表示注释的开始)

    (?imsx-imsx:...) 设置或移除标志,中间是-,标志的集合为imsx
    (?P<name>...)

    和一般()表达式一样,额外功能:可以用name来访问到对应的组

    例:

    matchObj = re.match("?P<first>.*)", "first")

    data = matchObj.group("first")

    (?P=name) 可以反向引用一个名字为name的组
    (?#...) #说明括号中的内容是注释,直接省略
    A(?=B) 若A在B前,才可匹配出A,同时B不消耗字符
    A(?!B) 若A不在B前,才可匹配出A,同时B不消耗字符
    (?<=A)B 若A在B前,才可匹配出B,同时A消耗字符
    (?<!A)B 若A不在B前,才可匹配出B,同时A消耗字符
    umber

    引用第number组的模式串

    pattern = '(A)(B) 2' 和 pattern = '(A)(B)(B)'是等价的

    例:re.search(r'(a)(b)2', 'abb')

    函数

    1. re:正则表达式模块

    函数声明 功能 备注
    compile(pattern, flag=0) 把一个正则表达式编译成一个正则表达式对象  pattern: 模式串flag:编译方法
    search(pattern, string, flags=0)   如果匹配不成功,则返回None成功,则MatchObject类型值

     split(pattern, string, maxsplit-0, flags=0)

    按照pattern模式对string进行分割(1. 把匹配成功的部分除去且成为分界

    2. 如果pattern中有(),那么匹配成功的部分不除去且自己成为一个组)

    maxsplit:最多分割次数

    如果pattern在串的最后能匹配成功,则还会分割出一个空串

     findall(pattern, string, flags=0)

    把string按照pattern从左到右匹配,子串结果以元组形式返回(不重叠)  

     finditer(pattern, string, flags=0) 

    把string按照pattern从左到右匹配,返回迭代器(不重叠)  

    sub(pattern, repl, string, count=0, flags=0) 

    string中和pattern匹配成功的部分删除(只有最左的),

    用repl来替换,返回匹配后的串

    count:要删除匹配成功的个数,如果取0则所有都要换

    escape(pattern)

    把pattern中除了ASCII字母和数字保留,其它都加上转义符,

    并返回修改后的串(当串中可能包含正则表达式特殊符号时可用来转换)

     

     2.  re.RegexObject类:正则表达式对象,对应的函数功能与re模块类似,返回re.MatchObject对象

    函数声明 功能 备注

    search(string[,pos[,endpos]])

      pos和endpos可不写

    match(string[,pos[,endpos]])

       

     split(string, maxsplit=0)

       

    findall(string[,pos[,endpos]])

       

    finditer(string,[,pos[,endpos]]) 

       

    sub(repl, string, count=0)

       

    groups

    模式中子组的个数  

    groupindex

    返回组名字与(?P<id>)定义组顺序的映射字典

     

    pattern

    模式串

     3. re.MatchObject类:匹配结果类

    函数声明 功能 备注

    group(index1, index2,...)

    返回匹配结果组

    index指出要返回结果组的下标,默认为0,

    把所有结果写成串。若有多个,以元组形式返回

    groups()

    返回所有子组的元组  

    groupdict()

    把所有命名的子组以字典形式返回  

    start([group]) 

    end([group])

    返回子组(用名字或下标标识)

    在串中匹配成功开始/结果的位置

     

    startpos  endpos

    传递给search和match函数时

    指定的开始/结束匹配串的位置

     

    lastindex  lastgroup

    最后匹配成功的组的下标/名字  如果没有的话,返回None   

    re

    匹配时用的正则表达式对象  
    string 传递给match/search函数的串  
  • 相关阅读:
    【UVA12093】Protecting Zonk (树形DP)
    【UVA1579】俄罗斯套娃 Matryoshka (动态规划)
    【UVA1371】Period (二分+DP)
    【UVA1379】Pitcher Rotation (贪心+DP)
    【UVA1633】禁止的回文串(状压DP)
    【POJ3358】
    【POJ2773】Happy 2006 欧几里德
    【POJ1284】Primitive Roots 欧拉函数
    【POJ2478】Farey Seque
    【POJ3243】拓展BSGS(附hash版)
  • 原文地址:https://www.cnblogs.com/coolqiyu/p/6931321.html
Copyright © 2011-2022 走看看