• python正则表达式re


    1. 正则表达式简介

    正则表达式并不是Python的一部分。在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别

    只在于不同的编程语言实现支持的语法数量不同;但不被支持的语法通常是不常用的部分。python正则表

    达式是用于文本匹配的强大工具,在源字符串中查找与给定的正则表达式相匹配的部分。一个正则表达式

    是由字母、数字和特殊字符(括号、星号和问号等)组成。

    正则表达式中的特殊字符:
    ^      正则表达式的开始字符
    $      正则表达式的结束字符
    w     匹配字母、数字、下划线,等价于[a-zA-Z0-9_] 
    W     匹配不是字母、数字、下划线的字符
    s     匹配空白字符
    S     匹配不是空白的字符 
    d     匹配数字,等价于[0-9] 
    D     匹配非数字的字符
         匹配单词的开始和结束
    B     匹配不是单词开始和结束的位置
    .      匹配任意字符,包括汉字
    [m]    匹配单个字符串
    [m…n] 匹配多个字符串
    [m-n]  匹配m到n区间内的数字、字母
    [^m]   匹配除m以外的字符串
    ()     对正则表达式进行分组,一对圆括号表示一组
    其中,匹配符"[]"可以指定一个匹配范围,例如[ok]将匹配包含o或k的字符
    "("和")"等正则表达式中的特殊字符,如果要把它们当做普通字符处理,需要在前面加上转义字符""


    正则表达式中的限定符:
    *     匹配0次或多次
    +     匹配1次或多次
    ?     匹配1次或0次
    {m}   重复m次
    {m,n} 重复m到n次。其中n可以省略,表示m到任意次
    利用{}可以控制字符重复出现的次数。例如,d{1,4}表示1位到3位数字。


    限定符与"?"(贪婪性)的使用

    *?     匹配0次或多次,且最短匹配
    +?     匹配1次或多次,且最短匹配
    ??     匹配1次或0次,且最短匹配
    {m,n}? 重复m到n此,且最短匹配
    {?#…} 正则表达式中的注释
    {?P<name>…} 给分组命名,name表示分组的名称
    {?P=name}    使用名为name的分组


    2. 使用re模块处理正则表达式

    re模块的一些函数都有一个flags参数,该参数用于设置匹配的规则选项。规则选项分别如下:
    •I(IGNORECASE): 忽略大小写(完整写法:re.I或re.IGNORECASE,下同)
    •M(MULTILINE): 多行模式,改变'^'和'$'的行为
    •S(DOTALL): 点任意匹配模式,改变'.'的行为
    •L(LOCALE): 使预定字符类 w W  B s S 取决于当前区域设定
    •U(UNICODE): 使预定字符类 w W  B s S d D 取决于unicode定义的字符属性
    •X(VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白、换行,以方便添加注释。


    re模块提供了一些根据正则表达式进行查找、替换和分割字符串的函数,这些函数使用正则表达式作为第

    一个参数。re模块常用函数如下:

    findall(pattern,string[,flags=0])
    从string内查找符合pattern的表达式,然后返回list列表

    split(pattern,string[,maxsplit=0])
    按照能够匹配的子串将string分割后返回列表。maxsplit用于指定最大分割次数,不指定将全部分割。

    sub(pattern,repl,string[,count=0])
    repl可以是字符串,也可以是函数。
    当repl是字符串的时候,就是把string内符合pattern的子串用repl替换;
    当repl是函数的时候,对每一个在string内不重叠的,匹配pattern的子串,调用repl(substring),然

    后用返回值替换substring
    count用于指定最多替换次数,不指定时全部替换。

    subn(pattern,repl,string[,count=0]): 
    功能与sub()相同,但是多返回一个值,即匹配后的替换次数 

    match(pattern,string[,flags=0])
    根据pattern从string头部开始匹配字符串,只返回第一次匹配成功的对象(MatchObject对象)。否则返回

    None

    search(pattern,string[,flags=0])
    根据pattern在string中匹配字符串,只返回第一次匹配成功的对象(MatchObject对象)。否则返回None

    Match对象是一次匹配的结果,Match对象的属性和方法:

    属性:
    string: 搜索的字符串。 
    re: 匹配时使用的Pattern对象。 
    pos: 搜索的开始索引位置。值与Pattern.match()和Pattern.seach()方法的同名参数相同。 
    endpos: 搜索的结束索引位置。值与Pattern.match()和Pattern.seach()方法的同名参数相同。 
    lastindex: 最后一个被捕获的分组在文本中的索引。如果没有被捕获的分组,将为None。 
    lastgroup: 最后一个被捕获的分组的别名。如果这个分组没有别名或者没有被捕获的分组,将为None。 

    方法:
    group([group1, …]): 
    获得一个或多个分组截获的字符串;指定多个参数时将以元组形式返回。group1可以使用编号也可以使用

    别名;编号0代表整个匹配的子串;不填写参数时,返回group(0);没有截获字符串的组返回None;截获了

    多次的组返回最后一次截获的子串。 
    groups([default]):
    以元组形式返回全部分组截获的字符串。相当于调用group(1,2,…last)。default表示没有截获字符串的

    组以这个值替代,默认为None。 
    groupdict([default]): 
    返回以有别名的组的别名为键、以该组截获的子串为值的字典,没有别名的组不包含在内。default含义同

    上。 
    start([group]):
    返回指定的组截获的子串在string中的起始索引(子串第一个字符的索引)。group默认值为0。 
    end([group]): 
    返回指定的组截获的子串在string中的结束索引(子串最后一个字符的索引+1)。group默认值为0。 
    span([group]): 
    返回(start(group), end(group))。 
    expand(template):
    将匹配到的分组代入template中然后返回。template中可以使用id或g<id>、g<name>引用分组,但不能

    使用编号0。id与g<id>是等价的;但10将被认为是第10个分组,如果你想表达1之后是字符'0',只能

    使用g<1>0。


    正则表达式的解析非常费时。如果多次使用findall()匹配字符串,搜索效率可能比较低。如果要多次使用

    同一规则匹配字符串,可以使用compile()函数进行预编译,compile()函数返回一个pattern对象。该对象

    拥有一系列方法用于查找、替换和扩展字符串,从而提高字符串的匹配速度。

    compile(pattern[,flag=0]): 
    将字符串形式的正则表达式编译为Pattern对象。第二个参数flag是匹配模式,取值可以使用按位或运算符

    '|'表示同时生效,比如re.I|re.M

    Pattern对象的属性和方法:

    属性:
    pattern: 编译时用的表达式字符串。
    flags: 编译时用的匹配模式。数字形式。
    groups: 表达式中分组的数量。
    groupindex: 以表达式中有别名的组的别名为键、以该组对应的编号为值的字典,没有别名的组不包含在

    内。

    方法:
    findall(string[,start[,end]]):查找所有符合pattern对象的结果,返回一个包含匹配结果的列表
    finditer(string[,start[,end]]):返回一个包含匹配结果(Match对象)的地址
    match(string[,start[,end]]):用法同match()
    search(string[,start[,end]]):用法同search()

  • 相关阅读:
    Django Form组件的扩展
    Python TCP与UDP的区别
    Python三次握手和四次挥手
    网络基础之网络协议
    Python 类方法、实例方法、静态方法的使用与及实例
    python深浅拷贝
    2021牛客寒假算法基础集训营1 题解
    01 Trie 专题
    MOTS:多目标跟踪和分割论文翻译
    牛客巅峰赛S2第6场题解
  • 原文地址:https://www.cnblogs.com/doudongchun/p/3694824.html
Copyright © 2020-2023  润新知