1
import re
s='1021533940@qq.com'
r = re.findall('^\d{9,11}@(?:qq|pp|aa)\.(?:com|sina|cn)$',s)
print r
['1021533940@qq.com']
注:使用了非捕获组(?:xx|yy)
2
import re
s='1021533940@qq.com'
r = re.findall('^(\d{9,11}@(qq|pp|aa)\.(com|sina|cn))$',s)
print r
[('1021533940@qq.com', 'qq', 'com')]
注:使用了捕获组(),编号规则是以“(”从左到右出现的顺序,从1开始进行编号。通常情况下,编号为0的组表示整个表达式匹配的内容。
3
import re
s='1021533940@qq.com'
r = re.findall('^102|com$',s)
print r
['102', 'com']
注:^ $ 匹配首尾,当一个字符串的某一子串具有多种可能时,采用分支结构来
匹配,“|”表示多个子表达式之间“或”的关系,“|”是以()限定范围的,如果在
“|”的左右两侧没有()来限定范围,那么它的作用范围即为“|”左右两侧整体。
4
import re
s='1021533940@qq.com'
r = re.findall('^(102|com)$',s)
print r
[]
注:当^ $同时存在时要匹配的为中间内容必须满足的形式,所以为空
5.
import re
s='aa<div>test1</div>bb<div>test2</div>cc'
r = re.findall('<div>.*?</div>',s)
print r
['<div>test1</div>', '<div>test2</div>']
注:此为非贪婪
正则表达式二采用的是非贪婪模式,在匹配到第一个“</div>”时使整个表达式匹
配成功,由于采用的是非贪婪模式,所以结束匹配,不再向右尝试,匹配结果为
“<div>test1</div>”。
6
import re
s='aa<div>test1</div>bb<div>test2</div>cc'
r = re.findall('<div>.*</div>',s)
print r
['<div>test1</div>bb<div>test2</div>']
注:此为贪婪
在匹配到第一个“</div>”时已经可以使整个表达式匹配成功,但是由于采用的是
贪婪模式,所以仍然要向右尝试匹配,查看是否还有更长的可以成功匹配的子串,
匹配到第二个“</div>”后,向右再没有可以成功匹配的子串,匹配结束,匹配结
果为“<div>test1</div>bb<div>test2</div>”
7
import re
s='qqq11111qqq11qqq11111qqq'
r = re.findall('[^\d]+\d*[^\d]+',s)
print r
['qqq11111qqq', 'qqq11111qqq']
注:注意字符的站位
http://www.jb51.net/article/73403.htm