15、正則模塊re
阿新 • • 發佈:2017-06-03
mage ext lac images pat 發生 tail company 一對一
一:什麽是正則?
正則就是用一些具有特殊含義的符號組合到一起(稱為正則表達式)來描述字符或者字符串的方法。或者說:正則就是用來描述一類事物的規則。(在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‘))
15、正則模塊re