Python正規表示式 完整學習筆記

2022-08-23 13:15:15 字數 4351 閱讀 6836

python的正規表示式,主要使用re模組

re模組為python自帶的模組,不需要單獨安裝,引入re模組:import re。

1.  re.match(pattern,string,flags=0)

功能:嘗試從字串起始位置匹配乙個字串,如果不是起始位置或不匹配,則返回值為none。

pattern:匹配的正規表示式

string:要匹配的字串

flags:標誌位,用於控制正規表示式的方式。

re.i: 忽略大小寫。

re.l: 做本地化識別。

re.m: 多行匹配。影響^和$。

re.s:是匹配包括換行符在內的所有字元。

re.u:根據unicode字元解析。

re.x:以更靈活的格式理解正則。

例如:print(re.match("www","www.www.baidu.com.www",flags=re.i))

執行結果:<_sre.sre_match object; span=(0, 3), match='www'>  

span(0,3)表示開始位置和結束位置

2.re.search(pattern,string,flags=0)

功能:在整個字串中找到第乙個匹配成功的。匹配成功後,返回字串位置。

例如:print(re.search("www","aaa.www.baidu.com.www"))

執行結果:<_sre.sre_match object; span=(18, 21), match='www'>

3.正規表示式的pattern寫法

「.」:可以匹配除換行符意外的任意字元。如果加上re.flags=s 就可以匹配換行符。

「」:是字元集合,匹配括號中包含的任意字元.

例如:[0123456789] 或者[0-9]或者[\d]:表示匹配0-9中所有的數字

[a-z]:表示匹配任意的小寫字母

[a-za-z0-9]:表示匹配所有的大小寫字母和數字

「[^]」: 例如[^ails]:匹配除了a,i,l,s,這幾個之外的所有字元。[^]稱為脫字元。

\w:匹配數字,字母和下劃線。

\w:匹配非數字,字母和下劃線,等同於^\w。

\s:匹配任意空白符,包括空格,回車,換頁,製表。

\s:等同於^\s。

邊界字元:「^」匹配行首,「$」匹配行尾。 例如:print(re.search("^aa","aab.www.baidu.com.www"))   執行結果:<_sre.sre_match object; span=(0, 2), match='aa'>

\a:只匹配整個字串開始。

\z:匹配整個字串結束,即使在re.m模式下。

3. 匹配多個字串

re.findall(pattern,string,flags=0)

功能:找到所有匹配的字串,返回字串列表。

例如:print(re.findall("www","www.www.baidu.com.www"))

執行結果:['www', 'www', 'www']

x?:盡可能少的匹配,0個或1個字元。(x可以是任意字串,後面不再贅述)

x*:盡可能多的匹配,1個或n個字元。

x+:匹配至少乙個x字串。

x:匹配確定的n個字串。例如:print(re.findall("w","www.www.baidu.com.www"))  執行結果:['ww', 'ww', 'ww']

x:至少匹配n個字串。

x:至少匹配n個,至多匹配m個。

x|y:匹配x或者y字串。例如:print(re.findall("www|baidu","www.www.baidu.com.www"))  執行結果:['www', 'www', 'baidu', 'www']

4.找到對應的字串,並拆分字串

re.split(pattern,string,maxsplit=0,flags=0)

maxslpit:表示最多切割多少次。

功能:找到與正規表示式條件相符合的字串,對整個字串進行拆分。返回乙個字串列表。

例如:print(re.split(r"\.+","www.www.baidu. com. www"))  注意:『\.』 意思是轉義『.』 這個符號。

執行結果:['www', 'www', 'baidu', ' com', ' www']

5.不占用過多記憶體的方式,找到對應的字串。

re.finditer(pattern,string,flags=0)

功能:掃瞄整個字串,返回乙個迭代器。

例如:d=re.finditer(r"www","wwww.www.www.baidu.com.www")

while true:

try:       

l=next(d)

print(d)

except stopiteration as e:

break

執行結果:

6. 字串的替換和修改

re.sub(pattern,repl,string,count=0,flags=0)

re.subn(pattern,repl,string,count=0,flags=0)

repl: 指定用來替換的字串。

count:最多替換的次數。count=0時替換所有符合條件的字串。

功能:先找到符合正規表示式的字串,再替換指定字串。

re.sub()和re.subn的區別:返回值不同,re.sub()只返回被替換後的字串。re.subn()返回被替換的字串和替換次數,為tuple型別。

例如:print(re.sub(r"www","aaa","www.www.baidu. com. www",count=2))

執行結果:aaa.aaa.baidu. com. www

例如:print(re.subn(r"www","aaa","www.www.baidu. com. www",count=2))

執行結果:('aaa.aaa.baidu. com. www', 2)

7. 將字串分組

使用(),將匹配的字串分組。在網路爬蟲中使用廣泛。

例如:str='010-09993345'

data=re.match(r"(?p(?p\d)-(?p\d))",str)

print(data.group(0)) #表示整個字串

print(data.group(1)) #表示第乙個分組,第乙個分組是最外面的乙個,包含內部的兩個。從外到內,從左至右。

print(data.group(2)) #表示第乙個子分組

print(data.group(3)) #表示第二個自分組

print(data.group('sub_group2')) #可以使用別名定位分組,別名新增方式"?p《別名》"

print(data.groups()) #表示所有的分組

執行結果:

010-09993345

010-09993345

01009993345

09993345

('010-09993345', '010', '09993345')

8. 編譯正規表示式

re.compile()

功能:將正規表示式編譯成乙個物件,可以呼叫re.mathc() , re.search() , re.findall() , re.finditer() , re.split() , re.sub() , re.subn()這些函式。

以後不用每次都寫正則的條件,只需要用物件呼叫即可。

例如(少量舉例,此處不再贅述):

執行結果:

Python 正規表示式學習(二)正規表示式語法

一,單一字元匹配 1 匹配任意字元 import re res re.match r a.abcd print res.group 列印結果 abc一點.表示匹配任意的字元。上面的 表示匹配a後面的任意兩個字元。必須從a開始。若寫成 b.則會發生錯誤。2 匹配指定字元 如 0 9a za z 表示 ...

python正規表示式學習

今天學習了python中有關正規表示式的知識。關於正規表示式的語法,不作過多解釋,網上有許多學習的資料。這裡主要介紹python中常用的正 則表示式處理函式。re.match 嘗試從字串的開始匹配乙個模式,如 下面的例子匹配第乙個單詞。import re text jgood is a handso...

python正規表示式學習

python 中的re 模組 正規表示式 就個人而言,主要用它來做一些複雜字串分析,提取想要的資訊 學習原則 夠用就行,需要的時候在深入 現總結如下 正規表示式中特殊的符號 表任意字元 表string起始 表string 結束 跟在字元後面表示,0個 多個,1個 多個,0個或者1個 符合條件的情況下...