# 在线调试工具: 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
原文:http://www.cnblogs.com/wangkc/p/6938427.html