正则表达式
先介绍一款在线测试工具 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 匹配非数字
\n 匹配一个换行符
\t 匹配一个制表符
\b 匹配一个单词的结尾
^ 匹配字符串的开始
$ 匹配字符串得结尾
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次以上,但尽可能少重复