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

    正则表达式是由普通字符和元字符组成, 

       普通字符包含大小写字母, 数字. 在匹配普通字符 的时候我们直接写就可以了. 比如"abc" 匹配的就是"abc". 

              元字符: 元字符才是正则表达式的灵魂. 元字符中的内容太多了, 在这里我们只介绍一些 常用的

    主要内容:

    • 字符组
    • 简单元字符
    • 量词
    • 惰性匹配和贪婪匹配
    • 分组
    • 转义
    1.  字符组:

      字符组用[]方括号括起来.在[]中出现的内容会被分配.例如:[zbc]匹配a或b或c

     如果字符组中的内容过多换可以使用-,例子:[a-zA-Z0-9] :匹配所有的大写小写还有数字

      2.      简单的元字符(常用)

        .    匹配除换行以外的任意字符

       w   匹配字母或数字或下划线 

      s     匹配所有任意字符(包括换行)

      d    匹配数字

         匹配一个换行符

         匹配一个制表符

       匹配一个单词的结尾

       ^  匹配字符串的开始

       $  匹配字符串的的结尾

       W 匹配非字母或数字或下划线

       D  匹配非数字

       S  匹配非空白符

       a|b 匹配字符a或字符b

       ()    匹配括号内的表达式,也表示一个组

       [...]  匹配字符组中的字符

       [^...]  匹配除了字符组中的字符的所有字符

      3.      量词  (我们目前匹配的所有内容都是单一文字符号,那如何一次性匹配很多个字符呢)

       *      重复零次或者更多次

        +  重复一次或者更多次

                ?    重复零次或者一次

        {n}  重复n次

        {n,}  重复n次或者更多次

        {n,m}  重复n到m次

      4.    惰性匹配和贪婪匹配

         在量词中的 *, +,{} 都属于贪婪匹配.就是尽可能多的匹配到结果

                 在使用 .* 后面加了? 则是尽可能的少匹配,表示惰性匹配

    str: 麻花藤昨天让英雄联盟关服了 
    reg: 麻花藤.*?                                    ##  *重复零次或更多次
    此时匹配的是 麻花藤                               #  ?  重复零次或一次
    
     str: <div>胡辣汤</div>                          # .  匹配除换行以外的任意字符
    reg: <.*>
     结果: 
    <div>胡辣汤</div>
    
    
    str: <div>胡辣汤</div>
     reg: <.*?>
    结果: 
      <div> 
      </div> 

    .*?x的特殊含义 找到下一个x为止 

    str: abcdefgxhijklmn 
    reg: .*?x
     结果:abcdefgx
     

       5.    分组   

            在正则中使用()进行分组. 比如. 我们要匹配⼀个相对复杂的身份证号. 身份证号分 成两种. 老的身份证号有15位. 新的身份证号有18位. 并且新的身份证号结尾有可能是x

    给出以下正则: ^[1-9]d{13,16}[0-9x]$ 
    ^[1-9]d{14}(d{2}[0-9x])?$ 
    ^([1-9]d{16}[0-9x]|[1-9]d{14})$ 
    

           6 . 转义 

        在正则表达式中, 有很多有特殊意义的是元字符, 比如 和s等,如果要在正则中匹 配正常的" "⽽而不是"换行符"就需要对""进行转义, 变成'\'.在python中, 无论是正则表达式, 还 是待匹配的内容, 都是以字符串的形式出现的, 在字符串中也有特殊的含义, 本身还需要转 义. 所以如果匹配一次" ", 字符串中要写成'\n', 那么正则里就要写成"\\n",这样就太麻烦了. 这个时候我们就用到了r' '这个概念, 此时的正则是r'\n'就可以了. 

     

  • 相关阅读:
    新线程 handler
    解决获取View的width和Height为0的4种方法
    回调深入理解 同步回调 以android中View.OnClickListener为列
    回调函数
    android:layout_weight
    studio rendering problems
    android:exported属性
    Codeforces 1264C/1265E Beautiful Mirrors with queries (概率期望、DP)
    Codeforces 1254C/1255F Point Ordering (交互题)
    Codeforces 576D Flights for Regular Customers (图论、矩阵乘法、Bitset)
  • 原文地址:https://www.cnblogs.com/systemsystem/p/9769205.html
Copyright © 2011-2022 走看看