常見的場景:一個模塊就是一個包含了python定義和聲明的文件,文件名就是模塊名字加上.py的後綴。html
但其實import加載的模塊分爲四個通用類別: python
1.使用python編寫的代碼(.py文件)正則表達式
2.已被編譯爲共享庫或DLL的C或C++擴展函數
3.包好一組模塊的包spa
4.使用C編寫並連接到python解釋器的內置模塊code
爲什麼要使用模塊?htm
若是你退出python解釋器而後從新進入,那麼你以前定義的函數或者變量都將丟失,所以咱們一般將程序寫到文件中以便永久保存下來,須要時就經過python test.py方式去執行,此時test.py被稱爲腳本script。blog
隨着程序的發展,功能愈來愈多,爲了方便管理,咱們一般將程序分紅一個個的文件,這樣作程序的結構更清晰,方便管理。這時咱們不單單能夠把這些文件當作腳本去執行,還能夠把他們當作模塊來導入到其餘的模塊中,實現了功能的重複利用。ip
在.py文件的開頭,輸入 import re。內存
findall : 匹配全部,每一項都是列表中的一個元素
ret = re.findall('\d+','sjkhk172按實際花費928') # 正則表達式,帶匹配的字符串,flagret = re.findall('\d','sjkhk172按實際花費928') # 正則表達式,帶匹配的字符串,flagprint(ret)
search : 只匹配從左到右的第一個,獲得的不是直接的結果,而是一個變量,經過這個變量的group方法來獲取結果。
若是沒有匹配到,會返回None,使用group會報錯。
ret = re.search('\d+','sjkhk172按實際花費928') print(ret) # 內存地址,這是一個正則匹配的結果print(ret.group()) # 經過ret.group()獲取真正的結果 ret = re.search('\d','owghabDJLBNdgv')print(ret)print(ret.group()) ret = re.search('\d+','sjkhk172按實際花費928')if ret : # 內存地址,這是一個正則匹配的結果 print(ret.group()) # 經過ret.group()獲取真正的結果
match:從頭開始匹配,至關於search中的正則表達式加上一個^。
ret = re.match('\d+$','172sjkhk按實際花費928') print(ret)
split:切割
s = 'alex|taibai|egon|'print(s.split('|'))s = 'alex83taibai40egon25'ret = re.split('\d+',s)print(ret)
sub:替換
ret = re.sub('\d+','H','alex83taibai40egon25') print(ret)ret = re.sub('\d+','H','alex83taibai40egon25',1) //舊,新,須要替換的,次數print(ret)
subn:返回一個元組,第二個元素是替換的次數
ret = re.subn('\d+','H','alex83taibai40egon25')print(ret)
compile 節省你使用正則表達式解決問題的時間。
編譯正則表達式,編譯成字節碼。
在屢次使用的過程當中,不會屢次編譯。
ret = re.compile('\d+') # 已經完成編譯了print(ret)res = ret.findall('alex83taibai40egon25')print(res)res = ret.search('sjkhk172按實際花費928')print(res.group())
finditer 節省你使用正則表達式解決問題的空間/內存
ret = re.finditer('\d+','alex83taibai40egon25') for i in ret: print(i.group())
findall 返回列表 找全部的匹配項 search 匹配就 返回一個變量,經過group取匹配到的第一個值,不匹配就返回None,group會報錯match 至關於search的正則表達式中加了一個'^' spilt 返回列表,按照正則規則切割,默認匹配到的內容會被切掉sub/subn 替換,按照正則規則去尋找要被替換掉的內容,subn返回元組,第二個值是替換的次數 compile 編譯一個正則表達式,用這個結果去search match findall finditer 可以節省時間finditer 返回一個迭代器,全部的結果都在這個迭代器中,須要經過循環+group的形式取值 可以節省內存
s = '<a>wahaha</a>' # 標籤語言 html 網頁
ret = re.search('<(\w+)>(\w+)</(\w+)>',s)
print(ret.group()) # 全部的結果
print(ret.group(1)) # 數字參數表明的是取對應分組中的內容
print(ret.group(2))
print(ret.group(3))
爲了findall也能夠順利取到分組中的內容,有一個特殊的語法,就是優先顯示分組中的內容。
s = '<a>wahaha</a>' ret = re.findall('(\w+)',s) print(ret) ret = re.findall('>(\w+)<',s) print(ret)
取消分組優先(?:正則表達式)
ret = re.findall('\d+(\.\d+)?','1.234*4') print(ret)
ret = re.findall('\d+(?:\.\d+)?','1.234*4')
print(ret)
對於正則表達式來講,有些時候咱們須要進行分組,來總體約束某一組字符出現的次數。
(\.[\w]+)?
對於python語言來講,分組能夠幫助你更好更精準的找到你真正須要的內容。
<(\w+)>(\w+)</(\w+)>
python 和 正則表達式 之間的特殊的約定。
分組命名:
(?P<這個組的名字>正則表達式)
s = '<a>wahaha</a>' ret = re.search('>(?P<con>\w+)<',s)print(ret.group(1))print(ret.group('con'))
s = '<a>wahaha</a>'pattern = '<(\w+)>(\w+)</(\w+)>'ret = re.search(pattern,s)print(ret.group(1) == ret.group(3))
使用前面的分組,要求使用這個名字的分組和前面同名分組中的內容匹配的必須一致
pattern = '<(?P<tab>\w+)>(\w+)</(?P=tab)>' ret = re.search(pattern,s)print(ret)