正则表达式
使用的特殊符号:
* 匹配前面出现的正则表达式0次或多次
+ 匹配前面出现的正则表达式1次或多次
? 匹配前面出现的正则表达式0次或1次
re1|re2 匹配正则表达式re1或re2
^ 匹配字符串的开始
$ 匹配字符串的结尾
. 匹配任何字符(换行符除外)
{N} 匹配前面出现的正则表达式出现N次
使用的字符
\d 匹配任何数字,和[0-9]一样(\D是\d的反义:任何非数字符)
\w 匹配任何数字字母字符,和[A-Za-z0-9]相同(\W是\w的反义)
\s 匹配任何空白符,和[\n\t\r\v\f]相同,(\S是\s的反义)
\b 匹配单词边界(\B是\b的反义)
\A 匹配字符串的开始
\Z 匹配字符串的结束
>>> import re
>>> str = 'abc123def12gh1'
>>> p1 = re.compile('\d+')
>>> print p1.findall(str)
['123', '12', '1']
>>>
>>> p2 = re.compile('\d')
>>>
>>> print p2.findall(str)
['1', '2', '3', '1', '2', '1']
>>>
>>> str = 'a@163.com;b@gmail.com;c@qq.com e0@163.com;f@qq.com'
>>> p3 = re.compile('\w+@163\.com')
>>> print p3.findall(str)
['a@163.com', 'e0@163.com']
>>>
>>> p4 = re.compile('\w+@[163|qq]\.com')
>>> print p4.findall(str)
[]
>>> p4 = re.compile('\w+@[163|qq]+\.com') # \w+ @前面一个或多个数字或字母, \.com \为转义字符
>>> print p4.findall(str)
['a@163.com', 'c@qq.com', 'e0@163.com', 'f@qq.com']
>>> str = '<html><h>title</h><body>xxx</body></html>'
>>> p5 = re.compile('<h>[^<]+</h>') # [^<]+表示不是尖括号<
>>> print p5.findall(str)
['<h>title</h>']
>>>
>>> p5 = re.compile('<h>([^<]+)</h><body>([^<]+)</body>') #圆括号用来指定找的部分
>>> print p5.findall(str)
[('title', 'xxx')]
>>> str = 'xx2016-06-11yy'
>>> p6 = re.compile('\d{4}-\d{2}-\d{2}') #\d{4} 数字出现4次
>>> print p6.findall(str)
['2016-06-11']
>>> p7 = re.compile('\d\d\d\d-\d\d-\d\d')
>>> print p7.findall(str)
['2016-06-11']