day19:常用模組(collections,time,random,os,sys)
阿新 • • 發佈:2018-12-22
1,正則複習,re.S,這個在用的最多,re.M多行模式,這個主要改變^和$的行為,每一行都是新串開頭,每個回車都是結尾。re.L 在Windows和linux裡面對一些特殊字元有不一樣的識別,re.L 是根據當前的作業系統來識別,這個不推薦使用,他就不一樣了。正常還是走我們的記得意思,re.U 這個對於ASCII碼是一樣的,對於中文才使用Unicode,re.X和re.M有點像
import re ret = re.findall('.*\d+','hsd739y8kk \ns99sihf99 g9o3y') print(ret) # ['hsd739y8', 's99sihf99 g9o3']ret = re.findall('.*\d+','hsd739y8kk \ns99sihf99 g9o3y',re.S) print(ret) #注意加了flag換行也給匹配了就 # ['hsd739y8kk \ns99sihf99 g9o3']
2,尖角號必須開頭,$符號,必須結尾,不然就是一個錯誤的正則
3,分組,在正則裡面,因為想對多個字元組整體兩次約束的,在re模組裡面,分組是有優先的(findall,split)
4,|,從左到右匹配,只要匹配上就不繼續匹配了,所以應該要把長的放在前面
5,[^],除了分組裡面的其他都匹配
6,轉義問題,特殊字元,比方說匹配星號要用\*這樣才能匹配
# 前面加上r 就沒有問題了,建議都加上 ret = re.findall('\\\\s','\s') #正則需要轉義,Python也需要轉義的 print(ret) # ['\\s'] ret = re.findall(r'\\s',r'\s') print(ret) # ['\\s'] ret = re.findall('\*','*') print(ret) ret = re.findall(r'\*','*') print(ret) # 字元組裡面是沒有兩次這一說的,說以正則裡面放在字元組裡面的特殊字元可以直接匹配,不需要轉義 ret = re.findall('[*]','*') print(ret)
7,但是字元組裡面的減號要注意一下,
# 正則裡面,只要是特殊字元就都給轉義了,就沒有問題 ret = re.findall('[-]','-') print(ret) # ['-'] ret = re.findall('[1-9]','12-') print(ret) # ['1', '2'] ret = re.findall('[1\-9]','12-') print(ret) #['1', '-']
8,正則裡面預設是貪婪匹配,量詞後面加問號就是非貪婪匹配了,惰性匹配,最常用的.*?abc,一直取,一直到遇到abc為止
9,