1. 程式人生 > >day19:常用模組(collections,time,random,os,sys)

day19:常用模組(collections,time,random,os,sys)

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,