我们将从最简单的正则表达式开始,由于正则表达式常用于操作字符串的,因此我们从最常见的任务下手:字符匹配
字符匹配
大多数字母和字符会匹配它们自身。
举个例子:正则表达式FishC将完全匹配字符串‘FishC’。
(你可以启用不区分大小写模式,则正则表达式FishC可以匹配‘FISHC’,或‘fishc’)
当然这个规则也有例外。
有少数特殊的字符我们称之为‘元字符’(metacharacter),它们并不能匹配自身,它们定义了字符类,子组匹配和模式重复次数等。
本文用很大的篇幅讨论了各种元字符及其作用。
下面是元字符的完整列表
. ^ $* + ? {} | ()
注释:如果没有这些元字符,正则表达式就会变得跟字符串的find()方法一样平庸了。
1、方括号
我们先来看一下方括号[],它们指定一个字符类用于存放你需要匹配的字符集合。
可以单独列出需要匹配的字符,也可以通过两个字符和一个横杆指定匹配的范围。
例如:[abc]会匹配字符a,或b,或c;[a-c]可以实现相同功能。后者使用范围来表示与前者相同的字符集合。
如果你想只匹配小写字母,你的RE可以写成[a-z]。
需要注意的一点是:元字符在括号中不会触发‘特殊功能’,在字符类中,它们只匹配本身。
例如:[akm$]会匹配'a','k','m',或'$',$是一个元字符,但是在方括号中它不代表特殊含义,它只匹配$字符本身。
2 、^
你还可以匹配方括号中位列出的其他所有字符。做法是在类的开头添加一个脱字字符^,
例如:[^5]会匹配除了‘5’之外的任何字符。
3、反斜杠
或许最终要的元字符当属反斜杠了‘’,跟python的字符串规则一样,如果在反斜杠后面紧跟着一个元字符,那么元字符的‘特殊功能’也不会触发。
例如:你需要匹配[ 或 , 你可以在前加反斜杠以消除他们的特殊功能: [ , \。
反斜杠后面跟一些字符还可以表示特殊的意义,例如表示十进制的数字,表示所有的字母或者表示所有的非空白的字符集合。
注释:反斜杠很牛逼,后面加元字符则去除其特殊功能,后面加普通字符则实现特殊功能。
例如:w 匹配任何单词字符。
如果正则表达式以字节的形式表示,这相当于[a-zA-Z0-9]
如果正则表达式表示的是一个字符串,w 会匹配所有的unicode数据库
你可以在编译正则表达式的时候,通过提供re.ASCII表示进一步限制 w 的定义。
注释:re.ASCII标志使得w 只能匹配ASCII字符,不要忘了python是unicode的。
它们可以包含在一个字符类中,并且一样拥有特殊含义。
例如:[s,.]是一个字符类,它将匹配任何空白字符,','或'.'
4、' . '
最后我们讲的一个元字符是 '.' ,它匹配除了换行符以外的任何字符。
如果设置了re.DOTALL标志,.将匹配包括换行符在内的任何字符。