一:什么是正则?
正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。
生活中处处都是正则:
比如我们描述:4条腿
你可能会想到的是四条腿的动物或者桌子,椅子等
继续描述:4条腿,活的
就只剩下四条腿的动物这一类了
二:常用匹配模式(元字符)
http://blog.csdn.net/yufenghyc/article/details/51078107
1 # =================================匹配模式================================= 2 #一对一的匹配 3 # 'hello'.replace(old,new) 4 # 'hello'.find('pattern') 5 6 #正则匹配 7 import re 8 #\w与\W 9 print(re.findall('\w','hello egon 123')) #['h', 'e', 'l', 'l', 'o', 'e', 'g', 'o', 'n', '1', '2', '3'] 10 print(re.findall('\W','hello egon 123')) #[' ', ' '] 11 12 #\s与\S 13 print(re.findall('\s','hello egon 123')) #[' ', ' ', ' ', ' '] 14 print(re.findall('\S','hello egon 123')) #['h', 'e', 'l', 'l', 'o', 'e', 'g', 'o', 'n', '1', '2', '3'] 15 16 #\d与\D 17 print(re.findall('\d','hello egon 123')) #['1', '2', '3'] 18 print(re.findall('\D','hello egon 123')) #['h', 'e', 'l', 'l', 'o', ' ', 'e', 'g', 'o', 'n', ' '] 19 20 #\A与\D 21 print(re.findall('\Ahe','hello egon 123')) #['he'],\A==>^ 22 print(re.findall('123\Z','hello egon 123')) #['he'],\Z==>$ 23 24 #\n与\t 25 print(re.findall(r'\n','hello egon \n123')) #['\n'] 26 print(re.findall(r'\t','hello egon\t123')) #['\n'] 27 28 #^与$ 29 print(re.findall('^h','hello egon 123')) #['h'] 30 print(re.findall('3$','hello egon 123')) #['3'] 31 32 # 重复匹配:| . | * | ? | .* | .*? | + | {n,m} | 33 #. 34 print(re.findall('a.b','a1b')) #['a1b'] 35 print(re.findall('a.b','a\nb')) #[] 36 print(re.findall('a.b','a\nb',re.S)) #['a\nb'] 37 print(re.findall('a.b','a\nb',re.DOTALL)) #['a\nb']同上一条意思一样 38 39 #* 40 print(re.findall('ab*','bbbbbbb')) #[] 41 print(re.findall('ab*','a')) #['a'] 42 print(re.findall('ab*','abbbb')) #['abbbb'] 43 44 #? 45 print(re.findall('ab?','a')) #['a'] 46 print(re.findall('ab?','abbb')) #['ab'] 47 #匹配所有包含小数在内的数字 48 print(re.findall('\d+\.?\d*',"asdfasdf123as1.13dfa12adsf1asdf3")) #['123', '1.13', '12', '1', '3'] 49 50 #.*默认为贪婪匹配 51 print(re.findall('a.*b','a1b22222222b')) #['a1b22222222b'] 52 53 #.*?为非贪婪匹配:推荐使用 54 print(re.findall('a.*?b','a1b22222222b')) #['a1b'] 55 56 #+ 57 print(re.findall('ab+','a')) #[] 58 print(re.findall('ab+','abbb')) #['abbb'] 59 60 #{n,m} 61 print(re.findall('ab{2}','abbb')) #['abb'] 62 print(re.findall('ab{2,4}','abbb')) #['abb'] 63 print(re.findall('ab{1,}','abbb')) #'ab{1,}' ===> 'ab+' 64 print(re.findall('ab{0,}','abbb')) #'ab{0,}' ===> 'ab*' 65 66 #[] 67 print(re.findall('a[1*-]b','a1b a*b a-b')) #[]内的都为普通字符了,且如果-没有被转意的话,应该放到[]的开头或结尾 68 print(re.findall('a[^1*-]b','a1b a*b a-b a=b')) #[]内的^代表的意思是取反,所以结果为['a=b'] 69 print(re.findall('a[0-9]b','a1b a*b a-b a=b')) #[]内的^代表的意思是取反,所以结果为['a=b'] 70 print(re.findall('a[a-z]b','a1b a*b a-b a=b aeb')) #[]内的^代表的意思是取反,所以结果为['a=b'] 71 print(re.findall('a[a-zA-Z]b','a1b a*b a-b a=b aeb aEb')) #[]内的^代表的意思是取反,所以结果为['a=b'] 72 73 #\# print(re.findall('a\\c','a\c')) #对于正则来说a\\c确实可以匹配到a\c,但是在python解释器读取a\\c时,会发生转义,然后交给re去执行,所以抛出异常 74 print(re.findall(r'a\\c','a\c')) #r代表告诉解释器使用rawstring,即原生字符串,把我们正则内的所有符号都当普通字符处理,不要转义 75 print(re.findall('a\\\\c','a\c')) #同上面的意思一样,和上面的结果一样都是['a\\c'] 76 77 #():分组 78 print(re.findall('ab+','ababab123')) #['ab', 'ab', 'ab'] 79 print(re.findall('(ab)+123','ababab123')) #['ab'],匹配到末尾的ab123中的ab 80 print(re.findall('(?:ab)+123','ababab123')) #findall的结果不是匹配的全部内容,而是组内的内容,?:可以让结果为匹配的全部内容 81 82 #| 83 print(re.findall('compan(?:y|ies)','Too many companies have gone bankrupt, and the next one is my company'))
来源:http://www.cnblogs.com/deasion/p/6936711.html