标签:连续 情况 字母 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.
标签:连续 情况 字母 nbsp 别名 回顾 def 连续字符串 种类型
原文地址:http://www.cnblogs.com/09120912zhang/p/7623433.html