1. 程式人生 > >15、正則模塊re

15、正則模塊re

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(ra\\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