美文网首页
四、正则表达式

四、正则表达式

作者: zhile_doing | 来源:发表于2018-05-19 11:47 被阅读0次
    1. 正则表达式

      • 元字符


      • 特殊字符


    2. 使用|来分隔多个正则符号

    3. 使用.来匹配单个字符
      f.o -> f和o之间有任意单个字符

    4. 开头^结尾$边界\b\B
      ^test 匹配test开头的字符串
      test$ 匹配test结尾的字符串
      ^$ 匹配空行
      \btest 匹配以test开始的字符串
      \btest\b 匹配单词test
      \Btest匹配包含test但不以test开头的字符串

    5. 使用[]匹配字符集合
      [abc]
      [a-z]
      [^a-z]

    6. 正则表达式中的分组
      重复单个字符只需在该单个字符后加上需要重复的次数(*?{}),当重复多个字符时,将该多个字符用()括起来,后面跟上重复次数即可,这里我们看一个匹配ip地址的范例,从ifconfig输出结果匹配到ip地址,在vim中匹配如下,由于(){}在shell中是特殊字符,所以使用\来转义\(\d\{1,3\}\.\)\{3\}\d\{1,3\}


      使用在线工具测试

    由于ip地址限制每个域不能超过255,使用((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

    1. 后向引用
      默认情况下,每个()括起来的分组会被分配一个从1开始的组号,特殊的分组0代表整个正则表达式
      使用()匹配一个子表达式后,匹配这个子表达式的文本,可以在后续正则中继续使用,\1表示分组一匹配的文本



      常用的分组语法如下



      使用命名分组(\k<name>)
    2. 零宽断言
      有时候我们想匹配某个模式之前或之后的部分,匹配的部分必须满足特定条件。

      • (?=exp)该位置后面可以匹配exp,返回除了exp的部分
        \b\w+(?=ing\b)
      • (?<=exp)该位置前面可以匹配exp,同样返回除了exp的部分
        (?<=broad)\w+\b
    3. 负向零宽断言
      断言某位置前或后不能出现某些字符,我们也可以使用反义,但是问题在于使用反义时,[^]总会占用一个字符空间,可以匹配到单词分隔符。

      • (?!exp)断言此位置后不匹配exp


      • (?<!exp>)断言此位置前不匹配exp


    4. 贪婪匹配与懒惰匹配
      当我们的正则表达式有表示重复次数的元字符时,默认情况下总是会自动匹配最长,比如ababab,用a.*b来匹配,会匹配到整个字符串,这就是贪婪匹配,容易理解懒惰匹配就是匹配最短。通过在元字符后加上?来将贪婪匹配变为懒惰匹配。如下



    5. python中的正则表达式re

      • 核心函数与表达式


      • compile()对给出的pattern进行编译,加快后续处理的速度,该过程不是必须的,search,match函数可以直接使用字符串来进行匹配,但是使用编译过后的字节码对象可以加快处理的速度
      • 匹配对象的group和groups方法
        re模块的match和search方法会返回一个匹配对象,该对象保存了模式匹配的结果,可以使用该对象的groups和group方法获取匹配的结果.group方法返回所有匹配对象或根据要求返回特定子组匹配的对象
      • match(pattern,string)从string开头匹配pattern



        如果开头不匹配,返回None


      • search(pattern,string)从string中搜索pattern第一次出现的位置


      • findall(pattern, string)从string中查找所有匹配,返回匹配字符串列表


      • sub(pattern, repl, string)将匹配pattern的部分替换为repl


      • re.split(pattern,string)使用pattern指定的字符分隔string,可以指定多个字符


      • 在匹配时,通过指定flag参数为re.I可以忽略大小写匹配
        In [8]: m = re.compile('a', re.I)
        
        In [9]: m.findall('abcAAbbc')
        Out[9]: ['a', 'A', 'A']
        

    相关文章

      网友评论

          本文标题:四、正则表达式

          本文链接:https://www.haomeiwen.com/subject/ioagdftx.html