正则表达式re模块
# 在线调试工具: tool.oschina.net/regex/#
import re
#w匹配字母数字下划线 W:非字母数字下划线
# print(re.findall('\w','as213df_*|d')) #['a', 's', '2', '1', '3', 'd', 'f', '_', 'd']
# print(re.findall('\W','as213df_*|d')) #['*', '|']
# print(re.findall('a\wb','a_b a3b aEb a*b')) #['a_b', 'a3b', 'aEb']
#2、\s匹配空字符, S匹配非空字符
# print(re.findall('\s','a b\nc\t')) #[' ', '\n', '\t']
# print(re.findall('\S','a b\nc\t')) #['a', 'b', 'c']
#3.\d 匹配数字 \D 匹配非数字
# print(re.findall('\d','a123bddfe4')) #['1', '2', '3', '4']
# print(re.findall('\D','a123bdd@fe4')) #['a', 'b', 'd', 'd', '@', 'f', 'e']
#4、\n匹配换行符 \t 匹配制表符
# print(re.findall('\n','a12\n3bd\ndfe4')) #['\n', '\n']
# print(re.findall('\t','a12\t3b\tdd\tfe4')) #['\t', '\t', '\t']
#5、^ 只匹配字符串的开头是否以某某开头,如果是则匹配到,不是为空
# print(re.findall('h','hello egon hao123')) #['h', 'h']
# print(re.findall('^h','hello egon hao123')) #['h']
#6、 str$ 是否以某某结尾,注意这里是放在要匹配的字符的右边,……是放在左边
# print(re.findall('3','hello e3gon hao123')) #['3', '3']
# print(re.findall('3$','3hello egon hao123')) #['3']
#7、 . 点 :匹配任意一个字符ac也不能匹配,\n换行符也不能匹配,但是加上re.S就能匹配出换行符
# print(re.findall('a.c','abc a1c a*c a|c abd aed ac a\nc')) #['abc', 'a1c', 'a*c', 'a|c']
# print(re.findall('a.c','abc a1c a*c a|c abd aed ac a\nc',re.S)) #['abc', 'a1c', 'a*c', 'a|c', 'a\nc']
#8、[]匹配任意一个字符。相比点的是可以指定需要匹配哪个字符【12】就是匹配出1或者2的
#[1,2\n] :就是匹配出1或者是逗号或者是2或者是换行符这四个字符
#【】可以匹配范围【0-9】:匹配从0到9 。-放到中间就是范围,放到其他地方就是符合
#[^0-9]:^放到【】里面代表是非的意思即只要不是0-9的都匹配出来,不是开头的意思
# print(re.findall('a[1,2]c','a2c a1c a*c a|c a21c a2d ac a\nc')) #['a2c', 'a1c']
# print(re.findall('a[0-9]c','a2c a1c a*c a|c a21c a2d ac a\nc')) #['a2c', 'a1c']
# print(re.findall('a[0-9a-zA-Z]c','aHc a1c a*c a|c a21c a2d ac a\nc')) #['aHc', 'a1c']
#9、 *+?{n,m} 都是重复匹配的意思
# *代表左边的字符出现0次或无穷次
# print(re.findall('ab*','acccc')) #['a']
# print(re.findall('ab*','abbbb')) #['abbbb']
# + 代表左边字符出现一次或无穷次
# print(re.findall('ab+','acccc')) #[]
# print(re.findall('ab+','abbbb')) #['abbbb']
# print(re.findall('ab+[123]','abbb1')) #['abbb1']
# {n,m} 匹配左边的字符出现n次到m次
# print(re.findall('ab{3}','abb abbb abbbb')) #['abbb', 'abbb']
# print(re.findall('ab{3,4}','abb abbb abbbbb')) #['abbb', 'abbbb']
# print(re.findall('ab{3,}','abb abbb abbbbb')) #i匹配3次到无穷次
# ? :?左边的字符匹配0次或1次
# print(re.findall('ab?c','ac abc aec a1c')) #['ac', 'abc']
#10、 .* 点* 贪婪匹配,匹配任意多个字符
# print(re.findall('a.*c','ac abc adfdc')) #只有一个结果 ['ac abc adfdc']
#11、 。*? 非贪婪匹配 :这里的?是转义的意思,转义为非贪婪匹配
# print(re.findall('a.*?c','ac abc adfdc')) #从左到右匹配到算是一次匹配成功['ac', 'abc', 'adfdc']
#12、() 匹配括号里面的内容,表示分组
# print(re.findall('compan(y|ies)','Too many companies have gone ban')) #['ies']
# print(re.findall('compan(?:y|ies)','Too many companies have gone ban')) #['companies']
#这里的?:语法,转义匹配出company或者companies
# ?:打印出真实的结果,不加则只打印出括号内的字符
# print(re.findall('ab+123','ababab123')) #['ab123']
# print(re.findall('(ab)+123','ababab123')) #['ab']
# print(re.findall('(?:ab)+123','ababab123')) #['ababab123']
# print(re.findall('a\\c','a\c')) #匹配不到 []
# print(re.findall('a\\\\c','a\c')) #['a\\c']
# ##r代表告诉解释器使用rawstring,即原生字符串,把我们正则内的所有符号都当普通字符处理,不要转义
# print(re.findall(r'a\c','a\c')) #[]
# print(re.findall(r'a\\c','a\c')) #['a\\c']
参考博客:http://www.cnblogs.com/linhaifeng/articles/6384466.html

浙公网安备 33010602011771号