先介绍一款在线测试工具 http://tool.chinaz.com/regex/
说到正则,只和字符串相关,因为要匹配的为只是个可变的值
1.字符组
[0-9],表示0-9这个范围的数字,和0123456789一样
[a-z] , 小写字母a到z
[A-Z] ,大写字母a到z
[0-9a-fA-F] ,匹配数字及大小写字母
2.字符
. 匹配除换行符以外得任意字符
w 匹配字母或数字或下划线 (不够严谨尽量少用,个人感觉[0-9a-fA-F_]最合适)
W 匹配非数字字母下划线
s 匹配任意空白符
S 匹配非空白符
d 匹配数字
D 匹配非数字
匹配一个换行符
匹配一个制表符
匹配一个单词的结尾
^ 匹配字符串的开始
$ 匹配字符串得结尾
a|b 匹配字符a或者b (较长得字符组要写在前面,写到后面永远匹配不到)
() 匹配括号内的一个表达式,也表示一个组
[...] 匹配字符中的字符
[^...] 匹配除了字符串中字符的所有字符
3.量词
* 重复零次或更多次
+ 重复一次或者更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n.m} 重复n次到m次
4.转义字符
在正则表达式中,有很多有特殊意义的是元字符,比如d和s等,如果要在正则中匹配正常的"d"而不是"数字"就需要对""进行转义,变成'\'。
在python中,无论是正则表达式,还是待匹配的内容,都是以字符串的形式出现的,在字符串中也有特殊的含义,本身还需要转义。所以如果匹配一次"d",字符串中要写成'\d',那么正则里就要写成"\\d",这样就太麻烦了。这个时候我们就用到了r'd'这个概念,此时的正则是r'\d'就可以了。
5.贪婪匹配
贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配
在量词后面加上?,转换成非贪婪模式
*? 重复任意次,但尽可能少重复
+? 重复一次或更多次,但尽可能少重复
?? 重复0次或一次,但尽可能少重复
{n,m}? 重复n次到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复