一、正規表示式
正規表示式是用來匹配字串非常強大的工具,在其他程式語言中同樣有正規表示式的概念。正規表示式是一種小型的、高度專業化的程式語言,他內嵌在python中,並通過re模組實現。
1.字元組:[字元組 在同個位置可能出現的各種字元組成了乙個字元組,在正規表示式中用表示,字元分為很多類,比如數字,字母,標點等等。假如現在要求乙個位置「只能出現乙個數字」,那麼這個位置上的字元只能是0,1,2,3,4,5,6,7,8,9這10個數之一。
字元:
\s 匹配非空白符
a|b 匹配字元a或者字元b
() 匹配括號內的表示式
[...] 匹配字元組中的字元
[^...] 匹配除了字元組中字元的所有字元
量詞:量詞 用法說明
* 重複零次或者更多次
+ 重複一次或者更多次
? 重複零次或一次
重複n次
重複n次或更多次
重複n到m次
轉義符:
在正規表示式中,有很多有特殊意義的元字元,比如\n,\s等,如果要在正則中匹配正常的「\n」,而不是「換行符」就需要對「\」進行轉義,變成「\\」。
在python中,無論是正規表示式,還是待匹配的內容,都是以字串的形式出現的,在字串中\也有特殊的含義,本身還需要轉義。所以如果匹配一次「\n」,字串中要寫成「\\\n」,簡便操作,利用r可以讓整個字串都不在轉義了。
貪婪匹配與非貪婪匹配:
<.>:先拿著裡面的\.\*去匹配所有的內容,然後再根據》往回退著找,遇到即停止。
<.>:先拿著?後面的》去匹配符合條件的最少內容,然後把匹配結果返回
幾個常用的貪婪匹配pattern:
*? 重複任意次,但盡可能少重複.*?的用法:+? 重複1次或更多次,但盡可能少重複
?? 重複0次或1次,但盡可能少重複
? 重複n到m次,但盡可能少重複
? 重複n次以上,但盡可能少重複
. 是任意字元二、re模組的使用* 是取 0 至 無限長度
? 是非貪婪模式。
何在一起就是 取盡量少的任意字元,一般不會這麼單獨寫,他大多用在:
.*?x
就是取前面任意長度的字元,直到乙個x出現
1.findall用法
ret = re.findall('a', 'eva egon yuan') # 返回所有滿足匹配條件的結果,放在列表裡2.searchprint(ret)
ret = re.search('a', 'eva egon yuan')3.matchprint(ret.group()) # 結果:'a'
# 函式會在字串內查詢模式匹配,直到找到第乙個匹配然後返回乙個包含匹配資訊的物件,該物件可以通過呼叫group()方法得到匹配的字串,如果字串沒有匹配,則返回none,並且需要注意的是如果ret是none,再呼叫.group()會直接報錯。這一易錯點可以通過if判斷來進行篩選
ret = re.match('a', 'abc').group() # 同search,不過僅在字串開始處進行匹配注意:findall的優先順序查詢:print(ret) # 『a'
# match是從頭開始匹配,如果正則規則從頭開始可以匹配上,就返回乙個物件,需要用group才能顯示,如果沒匹配上就返回none,呼叫group()就會報錯
print(ret) # ['oldboy'] 這是因為findall會優先把匹配結果組裡內容返回,如果想要匹配結果,取消許可權即可
其他方法:
ret = re.split('[ab]', 'abcd') # 先按'a'分割得到''和'bcd',在對''和'bcd'分別按'b'分割print(ret) # ['', '', 'cd']
ret = re.sub('\d', 'h', 'eva3egon4yuan4', 1) # 將數字替換成'h',引數1表示只替換1個
print(ret) # evahegon4yuan4
ret = re.subn('\d', 'h', 'eva3egon4yuan4') # 將數字替換成'h',返回元組(替換的結果,替換了多少次)
print(ret)
obj = re.compile('\d') #將正規表示式編譯成為乙個 正規表示式物件,規則要匹配的是3個數字
ret = obj.search('abc123eeee') #正規表示式物件呼叫search,引數為待匹配的字串
print(ret.group()) #結果 : 123
import re
ret = re.finditer('\d', 'ds3sy4784a') #finditer返回乙個存放匹配結果的迭代器
print(ret) # print(next(ret).group()) #檢視第乙個結果
print(next(ret).group()) #檢視第二個結果
print([i.group() for i in ret]) #檢視剩餘的左右結果
re 正規表示式模組
import re 預定義字符集 d 數字 0 9 d 非數字 d s 空白字元 空格 t r n f v s 非空白字元 s w 單詞字元 a za z0 9 w 非單詞字元 w 匹配數量 匹配除換行符以外的任何單個字元 匹配前乙個字元0或無限次 盡可能多的匹配 盡可能少的進行匹配前邊的正規表示式...
正規表示式 re模組
re是python中的正規表示式模組,正則也是每個人程式設計之路上必備的基礎技能。這部落格希望即便從來沒接觸過的人看了也會使用正規表示式字元 含義.匹配除了換行符外的任何字元。可以用re.dotall來設定匹配任何字元,包括換行符 丨a丨b 表示正規表示式匹配a或者b 匹配輸入字串開始的位置,如果設...
正規表示式re模組
正規表示式re模組 編譯正規表示式模式,返回乙個物件的模式。可以把那些常用的正規表示式編譯成正規表示式物件,這樣可以提高一點效率。1 compile 格式 re.compile pattern,flags 0 pattern 編譯時用的表示式字串。flags 編譯標誌位,用於修改正規表示式的匹配方式...