day021python 正则表达式

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

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

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

主要内容:

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

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

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

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

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

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

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

  \d    匹配数字

  \n  匹配一个换行符

  \t  匹配一个制表符

  \b 匹配一个单词的结尾

   ^  匹配字符串的开始

   $  匹配字符串的的结尾

   \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 . 转义 

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

 

猜你喜欢

转载自www.cnblogs.com/systemsystem/p/9769205.html