#######################################################################re
######################################################################
text #匹配普通文本
. #匹配除换行符外的任一个字符
^ #匹配字符串的开始标志
$ #匹配字符串的末尾
* #匹配前面表达式的0个或多个副本,匹配尽可能多的副本
+ #匹配前面表达式的1个或多个副本,匹配尽可能多的副本
? #匹配前面表达式的0个或1个副本
{m} #匹配前面表达式的m个副本
{m,n} #匹配前面表达式的第m到n个副本,匹配尽可能多的副本。m,n默认值分别为0和无穷大
#############
例:
s = r"wxinbbbb2of ew5inf!@#wo3 nie.xin]-^sienix"
print re.findall(r'i.b',s)
print re.findall(r'^w\w+',s)
print re.findall(r'x$',s)
print re.findall(r'inb?',s)
print re.findall(r'inb+',s)
print re.findall(r'inb*',s)
print re.findall(r'inb{,3}',s)
####result
['inb']
['wxinbbbb2of']
['x']
['inb', 'in', 'in']
['inbbbb']
['inbbbb', 'in', 'in']
['inbbb', 'in', 'in']
######################################################################
*? #匹配前面表达式的0个或多个副本,匹配尽可能少的副本
+? #匹配前面表达式的1个或多个副本,匹配尽可能少的副本
?? #匹配前面表达式的0个或1个副本,匹配尽可能少的副本
{m,n}? #匹配前面表达式的第m到n个副本,匹配尽可能少的副本
#?表示非贪婪模式,匹配尽可能少
例:
s = r"wxinbbbb2of ew5inf!@#wo3 nie.xin]-^sienix"
print re.findall(r'inb??',s)
print re.findall(r'inb+?',s)
print re.findall(r'inb*?',s)
print re.findall(r'inb{,3}?',s)
##########result
['in', 'in', 'in']
['inb']
['in', 'in', 'in']
['in', 'in', 'in']
#######################################################################
[...] #匹配一组字符中的任意一个,所有特殊字符在字符集失去特殊含义。如要使用],-,^需使用转义字符\
#或者把],-放在第一个字符,^放在非第一个字符
[^...] #匹配集合中不包括的字符
A|B #匹配A或B,A和B都是正则表达式
(...) #匹配圆括号中的正则表达式,并且一个圆括号表示一个分组
#特殊字符
例:
s = r"wxinbbbb2of ew5inf!@#wo3 nie.xin]-^sienix"
print re.findall(r'[a-z0-9]+',s)
print re.findall(r'[\]\-\^a-z0-9]+',s)
print re.findall(r'[^a-z0-9]+',s)
print re.findall(r'[a-z]+|[0-9]+',s)
print re.findall(r'(#[a-z0-9]+)',s)
#######result
['wxinbbbb2of', 'ew5inf', 'wo3', 'nie', 'xin', 'sienix']
['wxinbbbb2of', 'ew5inf', 'wo3', 'nie', 'xin]-^sienix']
[' ', '!@#' , ' ', '.', ']-^']
['wxinbbbb', '2', 'of', 'ew', '5', 'inf', 'wo', '3', 'nie', 'xin', 'sienix']
['#wo3']
#######################################################################
(?aiLmsux) #设置正则表达式标志 i表示不区分大小写,s表示.可以匹配换行符
(?#...) #一个注释,圆括号中的内容将被忽略
(?=...) #只有在括号中的模式匹配时,才匹配前面的表达式
(?!...) #只有在括号中的模式不匹配时,才匹配前面的表达式
例:
s = r"wxinbbBbb ew5inf!@wo3 nie.xin]-^sienix"
print re.findall(r'[a-z0-9]+',s)
print re.findall(r'(?i)[a-z0-9]+',s)
print re.findall(r'[a-z0-9]+(?=inbb)',s)
print re.findall(r'[o-z]+(?!inbb)',s)
#result
['wxinbb', 'bb', 'ew5inf', 'wo3', 'nie', 'xin', 'sienix']
['wxinbbBbb', 'ew5inf', 'wo3', 'nie', 'xin', 'sienix']
['wx']
['w', 'w', 'wo', 'x', 's', 'x']
#######################################################################
\number: #匹配分组的序号
\b #匹配单词开始或结尾处的空字符串
\B #匹配不在单词开始或结尾处的空字符串
\d #匹配十进制数字
\D #匹配非数字
\s #匹配空格字符 等价于r[\t\n\r\f\v]
\S #匹配非空格字符
\w #匹配字母数字字符
\W #匹配非字母数字字符
例:
s = r"w2qn2qBbb ew5in5if!@wo3 nie.xin]-^sienix"
print re.findall(r'(\d)([a-z])n\1\2',s)
print re.findall(r'\b[a-z]+',s)
print re.findall(r'\B[a-z]+',s)
print re.findall(r'\D[a-z]+',s)
print re.findall(r'\w[a-z]+',s)
print re.findall(r'\W[a-z]+',s)
#result
[('2', 'q'), ('5', 'i')]
['w', 'ew', 'wo', 'nie', 'xin', 'sienix']
['qn', 'q', 'bb', 'w', 'in', 'if', 'o', 'ie', 'in', 'ienix']
['qn', 'Bbb', ' ew', 'in', 'if', '@wo' , ' nie', '.xin', '^sienix']
['2qn', '2q', 'Bbb', 'ew', '5in', '5if', 'wo', 'nie', 'xin', 'sienix']
[' ew', '@wo' , ' nie', '.xin', '^sienix']