1. 字符集合设定符:[ ]
[abc123],表明字符’a’ ‘b’ ‘c’ ‘1’ ‘2’ ‘3’都符合它的要求,可以被匹配
[a-zA-Z],表明所有英文字母的大小写
[^a-zA-Z],‘^’在开头表示取非,表明不匹配所有英文字母
[a-z^A-Z],‘^’不在开头,表示其本身,表明匹配所有英文字母和字符‘^’
2. 或规则:|
将两个规则并列起来,以‘|’连接,表示只要满足其中之一就可以匹配
‘|’在[ ]中,表示其本身
‘|’的有效范围是它两边的整条规则,比如‘dog|cat’匹配的是‘dog’和’cat’,而不是’g’和’c’
3. 无捕获组:(?:)
当你要将一部分规则作为一个整体对它进行某些操作,需要将这部分规则用’(?:’ ‘)’把它包围起来
>>> s = ‘I have a dog , I have a cat’
>>> re.findall( r’I have a (?:dog|cat)’ , s )
['I have a dog', 'I have a cat']
>>> re.findall( r’I have a dog|cat’ , s )
['I have a dog', 'cat']
>>> s=’ababab abbabb aabaab’
>>> re.findall( r’\b(?:ab)+\b’ , s )
['ababab']
>>> re.findall( r’\b(ab)+\b’ , s )
['ab']
4. 匹配所有字符:.
匹配除换行符’\n’外的所有字符,如果使用了’S’选项,匹配包括’\n’的所有字符
>>> s=’123\n456\n789’
>>> findall(r‘.+’, s)
['123', '456', '789']
>>> re.findall(r‘.+’ , s , re.S)
['123\n456\n789']
5. 匹配字符串的开头和结尾:^ , $
多行模式下,它们可以匹配每一行的行首和行尾
6. 匹配数字:\d,等价于[0-9]
7. 匹配非数字:\D,等价于[^0-9]
8. 匹配字母和数字:\w,等价于[a-zA-Z0-9]
9. 匹配非英文字母和数字:\W,等价于[^a-zA-Z0-9]
10. 匹配间隔符:\s,匹配空格符、制表符、回车符等表示分隔意义的字符,等价于[ \t\r\n\f\v]
11. 匹配非间隔符:\S,等价于[^ \t\r\n\f\v]
12. 匹配字符串开头:\A
它和’^’的区别是,’\A’只匹配整个字符串的开头,即使在’M’模式下,它也不会匹配其它行的行首
>>> s= '12 34\n56 78\n90'
>>> re.findall( r'^\d+' , s , re.M ) #匹配位于行首的数字
['12', '56', '90']
>>> re.findall( r’\A\d+’, s , re.M ) #匹配位于字符串开头的数字
['12']
13. 匹配字符串结尾:\Z
它和’$’的区别是,’\Z’只匹配整个字符串的结尾,即使在’M’模式下,它也不会匹配其它各行的行尾
>>> re.findall( r'\d+$' , s , re.M ) #匹配位于行尾的数字
['34', '78', '90']
>>> re.findall( r’\d+\Z’ , s , re.M ) #匹配位于字符串尾的数字
['90']
14. 匹配单词边界:\b
它匹配一个单词的边界,比如空格等,不过它是一个‘0’长度字符,它匹配完的字符串不会包括那个分界的字符,而如果用’\s’来匹配的话,则匹配出的字符串中会包含那个分界符
>>> s = 'abc abcde bc bcd'
>>> re.findall( r’\bbc\b’ , s ) #匹配一个单独的单词 ‘bc’ ,而当它是其它单词的一部分的时候不匹配
['bc'] #只找到了那个单独的’bc’
>>> re.findall( r’\sbc\s’ , s ) #匹配一个单独的单词 ‘bc’
[' bc '] #只找到那个单独的’bc’,不过注意前后有两个空格,可能有点看不清楚
15. 匹配非边界:\B
16. 重复
0或多次匹配:*
1或多次匹配:+
0或1次匹配:?
精确匹配m次:{m}
匹配最少m次,最多n次:{m,n}
参考链接:http://blog.csdn.net/smilelance/article/details/6529950