参考:http://www.opython.com/350.html
正则表达式
正则表达式(regular express),亦称规则表达式,在Python内置模块中名称为 re,即是 Regular Express 的缩写。正则表达式是对字符串操作的一种逻辑公式,用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,用来表达对字符串的一种过滤逻辑。
特定字符:
一、匹配单个字符
\d:匹配单个数字
\D:匹配单个非数字
\w:匹配单个字母或数字或下划线
\W:匹配单个字母或数字或下划线以外的字符
\s:匹配单个不可见字符,例如:\w\s-\s\d匹配a – 3。(匹配的是空格)
\S:匹配单个可见字符
.:匹配任意一个字符,例如\w.\d匹配a~3。
.:匹配字符
二、匹配多个字符
*:匹配任意数量字符
三、匹配范围
[xyz]:匹配xyz中任意一个字符
[^xyz]:匹配非xyz的字符
[x|y]:匹配其中任意一个字符
(xxx|yyy):匹配其中任意一个字符串
[a-z]:匹配a-z的范围
[^a-z]:匹配a-z以外的范围
四、匹配数量
?:0-1个前方子表达式。例如\w?\d匹配a3和3。
+:数量大于0个前方子表达式。例如:\s+ 表示至少一个空格。
{n}:前方子表达式数量为n次。
{n,}:前方子表达式数量至少为n次。
{n,m}:前方子表达式数量至少为n次,最多为m次。
五、匹配首尾字符
^:匹配字符串起始单个字符,后方紧随首个字符或表达式。
$:匹配字符串末尾单个字符,前方紧随末尾字符或表达式。
\b:匹配单词边界,即字符串末尾字符串。例如:er\b匹配player。
\B:匹配非单词边界,即字符串末尾之前的字符串。例如:er\B匹配error。
六、特殊匹配
\:转义字符
\f:匹配一个换页符
\n:匹配一个换行符
\r:匹配一个回车符
\t:匹配一个制表符
\v:匹配一个垂直制表符
七、零宽度断言
零宽度断言是一种零宽度的匹配,它匹配到的内容不会保存到匹配结果中去,最终匹配结果只是一个位置。
它的作用是给指定位置添加一个限定条件,用来规定此位置之前或者之后的字符必须满足限定条件才能使正则中的字表达式匹配成功。
(?!表达式):向后匹配一个字符,如果不是表达式对应的字符,则匹配成功。
(?=表达式):向后匹配一个字符,如果是表达式对应的字符,则匹配成功。
(?<=表达式):向前匹配一个字符,如果是表达式对应的字符,则匹配成功。
(?<!表达式):向前匹配一个字符,如果不是表达式对应的字符,则匹配成功。
另外,补充一点,如果想获取到零宽度断言匹配成功的字符,需要在断言后方填写表示单个字符的表达式,例如:(?!,).表示字符不是“,”则获取。
——————————————————————————————-
在上方的分类内容中,有一些内容具有等价关系。
等价是等同于的意思,表示同样的功能,用不同符号来书写。
等价字符:
?等价于匹配长度{0,1}
*等价于匹配长度{0,}
+等价于匹配长度{1,}
\d等价于[0-9]
\D等价于[^0-9]
\w等价于[A-Za-z_0-9]
\W等价于[^A-Za-z_0-9]
既然是等价关系,在编写正则表达式的时候就可以互相替代,使用等价字符能够让表达式变得更简洁。
接下来,我们归纳一下常用的一些运算符与表达式,记住这些内容我们就能够
常用运算符与表达式:
^:字符串开始
$:字符串结尾
():域段/组(group),能够将匹配表达式的字符临时保存,并通过函数group(args)获取。
[]:包含,默认是一个字符长度
[^]:不包含,默认是一个字符长度
{n,m}:匹配长度
.:任何单个字符
|:或
\:转义
[A-Z]:26个大写字母
[a-z]:26个小写字母
[0-9]:0至9数字
[A-Za-z0-9]:26个大写字母、26个小写字母和0至9数字
,:分割,例如:[A,H,T,W] 包含字母A或H或T或W;[a,h,t,w]
包含字母a或h或t或w;[0,3,6,8] 包含数字0或3或6或8。