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

    1、原子概念:

      原子是正则表达式中最基本的组成单位,每个正则表达式至少包含一个原子

      常见原子类型:

        普通字符,如a b c等

        非打印字符,如 等

        通用字符,如d, D等

      常用的通用字符:

    字符 说明
    d   匹配一个数字字符,等价于[0-9]  
    D 匹配一个非数字字符,等价于[^0-9]
    s 匹配任何空白字符,包括空白,制表符,换行符等等, 等价于[f v]  
    S 匹配任何非空白字符
    w 匹配字母,数字,下划线,等价于[a-zA-Z0-9_]
    W 匹配非字母,非数字,非下划线


    2、元字符,就是正则表达式中具有一些特殊含义的字符

      常见的元字符有:

    字符 描述
    .

    匹配除了 之外的任何字符

    要匹配 在内的字符,需要使用.|

    [xyz] 字符集合,匹配所包含的任意一个字符
    [^xyz] 负值字符集合,匹配未包含的任意一个字符
    [a-z] 匹配指定范围内的任意一个字符
    *     匹配前面的子表达式 0 次或 多 次,如zo* 可以匹配z,zo,zoo等
    + 匹配前面的子表达式 1 次或 多 次,如zo+可以匹配zo,zoo但是不能匹配z
    匹配前面的子表达式 0 次或 1 次, 如zo?可以匹配z,zo不能匹配zoo
    {n} n是一个非负整数,匹配确定的n次
    {n,} 至少匹配n次,o{0,}等价于o*, o{1,}等价于o+,o{0,1}等价于o?
    {n,m} 最小匹配n次,最多匹配m次,
    将下一个字符标记为特殊字符,或一个原义字符,或一个向后引用,或一个八进制转义符
    ^ 匹配字符串的开始位置,如果设置了RegExp对象的Multiline属性, ^也匹配 或 之后的位置
    $ 匹配字符串的结束位置,如果设置了RegExp对象的Multiline属性,^也匹配 或 之前的位置

    如果是跟在其他任何一个限制符后面(*,+,?,{n},{n,m}等),匹配模式将变成非贪婪模式

    非贪婪模式尽可能少的匹配所搜索的字符串,而贪婪模式尽可能多的匹配所搜索的字符串

    如"oooo"中,o+将匹配所有o,o+?将只匹配一个o

    x|y 匹配x或y
     

    3、模式修正符

      在不改变正则表达式的情况下,通过模式修正符改变正则表达式的意义,从而实现一些匹配结果的调整

    修饰符   描述  
    re.I 使匹配对大小写不敏感
    re.S 使 . 匹配包括换行在内的所有字符  
    re.L 做本地化识别匹配
    re.M 多行匹配,影响^和$
    re.U 根据Unicode字符集解析字符

     4、re模块

    python中,通过re模块来实现正则匹配

    re模块中常用的功能函数:

     1)compile()

       编译正则表达式模式,返回一个正则对象(可以把常用的正则表达式编译成正则表达式对象,这样可以提高效率)

        re.compile(pattern[, flags=0])

         pattern:编译时用的表达式字符串

         flags:编译标志位,用于修改正则表达式的匹配方式,如re.I 不区分大小写,re.S等

        import re

        tt = "Tina is a good girl, she is cool, clever..."

        pattern = r"w*oow*"  # 查找包含oo的单词

        reg = re.compile(pattern)

        reg.findall(tt)  # ['good', 'cool']

     2)match()

        决定re是否在字符串开头位置匹配

        re.match(pattern, string[, flags])

        print(re.match("www", "www.baidu.com").group)  # www

        print(re.match("www", "WWW.BAIDU.COM", re.I).group())  #WWW

       3)search()

        re.search(pattern, string[, flags])

        search()会在字符串内查找匹配,如果找到第一个匹配的,就返回,如果没有找到就返回None

        match和search一旦匹配成功,就是一个match object对象,match object对象有以下方法:

          group():返回被re匹配的字符串

          start():返回匹配开始的位置

          end():返回匹配结束的位置

          span():返回一个包含开始,结束位置的元组

         

       4)findall()

        遍历查找所有匹配的元素,以列表形式返回

        re.findall(pattern, string[, flag])

        

      5)finditer()

        re.finditer(pattern, string[, flags])

        搜索string,找到re匹配的所有的子串,并把它们作为迭代器返回,返回的结果是由所有匹配的match对象组成的迭代器

        

      6)split()

        按照能够匹配的子串将string分割后,返回的列表

        re.split(pattern, string[, flag])

        如下,按照空白字符分割字符串,返回列表

        

        按数字分割字符串,返回列表

        

      7)sub()

        re.sub(pattern, rep1, string, count)

          pattern:匹配的正则表达式

          rep1:替换的新的字符串

          string:原始字符串

          count:指定替换次数,默认为0,表示都替换。

        

         sub() 还允许使用函数对匹配项进行复杂的处理,如下,把字符串中所有数字替换后(数字+1)

        

      8)subn()

        返回替换后的结果和替换的次数,以元组形式返回

        re.subn(pattern, rep1, string ,count=0, flags)

        

    5、re模块中re.match(), re.search(), re.findall()的区别

      re.match()只在字符串开始位置进行匹配,如果不匹配就返回None

      re.search()遍历整个字符串,找到第一个匹配项就返回

      re.findall()遍历整个字符串,找到所有的匹配项并以列表形式返回

      

      

  • 相关阅读:
    算法练习题
    牛XX面试题
    web前端面试题
    在js中什么情况下会返回undefined
    yarn
    Web 开发技巧
    dll 文件创建与使用
    【转】 VS2008在64位Windows平台上编译ArcEngine导致HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)错误的解决办法
    Googlemap获取经纬度For APIV3
    javascript局部变量/全局变量
  • 原文地址:https://www.cnblogs.com/fiona-zhong/p/10180498.html
Copyright © 2011-2022 走看看