码迷,mamicode.com
首页 > 编程语言 > 详细

python正则表达式

时间:2017-10-03 12:06:27      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:连续   情况   字母   nbsp   别名   回顾   def   连续字符串   种类型   

元字符:匹配字符、匹配位置、匹配数量、匹配模式.

          常见元字符列表

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

               \b  匹配单词的开始或结束

               \d  匹配数字

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

                \s 匹配任意空白符,包括空格、制表符(Tab)、换行符、中文全角空格等

                 ^ 匹配字符串的开始

                 $匹配字符串的结束

           常用限定符

          *   重复零次或更多次

          +  重复一次或更多次

          ? 重复零次或一次

         {n}重复n次

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

         {n,m}重复n到m次

         常用反义字符

          \W     匹配任意不是字母、数字、下划线的字符

           \S    匹配任意不是空白符的字符

           \D 匹配任意非数字的字符

            \B 匹配不是单词开头或结束的位置

           [^a] 匹配除了a以外的任意字符

          [^abcde] 匹配除了a、b、c、d、e这几个字母以外的任意字符

           [^(123|abc)] 匹配除了1、2、3或者a、b、c这几个字符以外的任意字符

    后向引用:

              使用小括号指定一个表达式就可以看做是一个分组。默认情况下,每个分组会自动拥有一个组号,规则是:从左至右,以分组的左括号为标志,第一个出现的分组组号为1

                  表 常用的分组形势

          分类                 语法                                            含义

                                  (exp)                 匹配exp,并捕获文本到自动命名的组里

            捕获               (?P<name>exp) 捕获exp,并捕获wenben到名称为name的组里

                                   (?:exp)     匹配exp,不捕获匹配的文本,也不给此分组分配组号

                                   (?=exp)   匹配exp前面的位置

          零宽断言           (?<=exp)  匹配exp后面的位置

                                   (?!exp) 匹配后面跟的不是exp的位置

                                   (?<!exp)匹配前面不是exp的位置

 

               注释              (?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,只用于提供注释让人阅读

 

零宽度断言:‘\b‘,‘^‘匹配的是一个位置,而且这个位置需要满足一定的条件,我们把这个条件称为断言或者零宽度断言。

           零宽度正预测先行断言:(?=exp),他断言位置的后面能匹配表达式exp.比如[a-z]*(?=exp)匹配以ing结尾的部分,查找I love cooking and singing时会匹配出cook和sing.

先行断言的执行步骤是从要匹配字符的最右端找到第一个“ing” ,再匹配前面的表达式,如无法匹配则查找第二个。

         零宽度正回顾后发断言:(?<=exp),他断言此位置的前面能匹配表达式exp。比如(?<=abc).*匹配以abc开头的字符串的后面部分,可以匹配abcdefgabc中defgabc二不是abcdefg,后发断言和先行断言正好相反,他从要匹配的字符串的最左端开始查找断言表达式,之后再匹配后面的字符串,如果无法匹配则继续查找第二个断言表达式,如此反复。

         零宽度负预测先行断言:(?!exp) 断言此位置的后面不能匹配表达式exp。比如\b((?!abc)\w)+\b匹配不包含连续字符串abc的单词

         零宽度服预测后发断言(?<!exp)断言此位置的前面不能匹配表达式exp.比如(?<![a-z])\d{7}匹配前面不是小写字母的七位数字。

用于匹配不包含属性的简单HTML标记内的内容  (?<=<(\w+)>).*(?=<\/\1).

   贪婪与懒惰

              当正则表达式中包含能接受重复的限定符时,通常的行为是(整个表达式能匹配的前提下)匹配尽可能多的字符,

这就是贪婪模式。以表达式a\w+b为例,如果搜所a12b34b尽可能多的匹配,左后就会匹配整个a12b34b而不是a12b,

但如果想匹配出a12b,该如何处理呢?就要开启懒惰模式将上面a\w+b改为a\w+?b就可以啦

                                 懒惰限定符的使用方式

               *?  重复任意多次,但尽可能少重复

                +? 重复1次或更多次,但尽可能少重复

                ??重复0次或1次,但尽可能少重复

                {n,m}?重复n到m次,但尽可能少重复

                {n,}?重复n次以上,但尽可能少重复

 

                              表python的匹配规则

语法                          含义                      表达式            完整匹配字符串

\A                           仅匹配字符串开头    \Aabc                 abc

\Z                            仅匹配字符串末尾     abc\Z               abc

(?P<name>)            分组,除了原有编号外在指定一个额外的别名    (?P<word>abc){2}  abcabc

(?P=name)                引用别名为<name>的分组匹配到的字符串     (?P<id>\d)abc(?P=id)    1abc1,5abc5

 

python中的匹配处理方法,主要是通过re模块里面的几个方法

1.

 

 

 

 

 

 

              

 

 

         

          

 

 

 

           

 

 

 

 

 

                

                

     

python正则表达式

标签:连续   情况   字母   nbsp   别名   回顾   def   连续字符串   种类型   

原文地址:http://www.cnblogs.com/09120912zhang/p/7623433.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!