Python 正規表示式

2021-09-20 05:46:27 字數 4546 閱讀 1844

什麼是正規表示式?

正規表示式(regular expressions 也稱為 res,或 regexes 或 regex patterns)本質上是乙個微小的且高度專業化的程式語言。

正規表示式並不是python的一部分。它被嵌入到 python 中,並通過 re 模組提供給程式猿使用。使用正規表示式,你需要指定一些規則來描述那些你希望匹配的字串集合。這些字串集合可能包含英語句子、 e-mail 位址、tex 命令,或任何你想要的字串。

下圖展示了使用正規表示式進行匹配的流程:

1、普通字元

>>>萬用字元(.)

正規表示式可以匹配多於乙個的字串,萬用字元(.)可以匹配任何除換行符「\n」外的字元。

例:待匹配文字:「school」

正規表示式:「s....l」

匹配結果:「school」

>>>轉義符(\)

轉義字元,使用後使乙個字元改變原來的意思,如果字串中有字元需要匹配,可以使用(\字元)來表達。

例:待匹配文字:「w3.school」

正規表示式:「w3\.school」

匹配結果:「w3.school」

>>>字符集([ ])

我們可以使用中括號([ ])括住字串來建立字符集。可以使用範圍,比如『[a-z]』能夠匹配a到z的任意乙個字元;還可以通過乙個接乙個的方式將範圍聯合起來使用,比如『[a-za-z0-9]』能夠匹配任意大小寫字母和數字。

例:待匹配文字:「w3school」

正規表示式:「[a-z]」

匹配結果:「school」

正規表示式:「[0-9]」

匹配結果:「3」

正規表示式:「[a-z]」

匹配結果:「w」

>>>反轉字符集([^ ])

可以在開頭使用^字元,比如『[^abc]』可以匹配任何除了a、b、c之外的字元。

例:待匹配文字:「w3school」

正規表示式:「[^a-z]」

匹配結果:「w3」

2、預定義字符集

>>>數字(\d):匹配乙個數字字元。等價於 [0-9]。

例:待匹配文字:「w3school」

正規表示式:「\d」

匹配結果:"3"

>>>非數字(\d): 匹配乙個非數字字元。等價於 [^0-9]。

例:待匹配文字:「w3school」

正規表示式:「\d」

匹配結果:"wschool"

>>>空白字元(\s):  匹配任何空白字元,包括空格、製表符、換頁符等等。等價於 [ \f\n\r\t\v]。

例:待匹配文字:「w3 school」

正規表示式:「w3\sschool」

匹配結果:"w3 school"

>>>非空白字元(\s):  匹配任何非空白字元。等價於 [^ \f\n\r\t\v]。

例:待匹配文字:「w3 school」

正規表示式:「\s」

匹配結果:"w3school"

>>>任何單詞字元(\w):  匹配包括下劃線的任何單詞字元。等價於'[a-za-z0-9_]'。

例:待匹配文字:「w3_school」

正規表示式:「\w」

匹配結果:"w3_school"

>>>>任何非單詞字元(\w):  匹配任何非單詞字元。等價於 '[^a-za-z0-9_]'。

例:待匹配文字:「!@#w3school」

正規表示式:「\w」

匹配結果:"!@#"

3、數量詞

>>>(pattern)* :   允許模式重複0次或多次

例:待匹配文字:「www.jianshu.com」

正規表示式:「w*\.jianshu\.com」

匹配結果:"www.jianshu.com"

>>>(pattern)+ :   允許模式重複1次或多次

例:待匹配文字:「www.jianshu.com」

正規表示式:「w+\.jianshu\.com」

匹配結果:"www.jianshu.com"

>>>(pattern) :  允許模式重複m~ n次

例:待匹配文字:「wwwww.jianshu.com」

正規表示式:「w\.jianshu\.com」

匹配結果:"www.jianshu.com"

4、邊界匹配

>>>匹配字串開頭(^): 在多行模式中匹配每一行的開頭

例:待匹配文字:「w3school」

正規表示式:「^w3」

匹配結果:"w3"

>>>匹配字串末尾($): 在多行模式中匹配每一行的末尾

例:待匹配文字:「w3school」

正規表示式:「ool$」

匹配結果:"ool"

>>>僅匹配字串開頭(\a)

例:待匹配文字:「w3school」

正規表示式:「\aw3」

匹配結果:"w3"

>>>僅匹配字串末尾(\z)

例:待匹配文字:「w3school」

正規表示式:「ool\z」

匹配結果:"ool"

5、邏輯、分組

>>>管道符號(|): 左右表示式任意匹配乙個。如果|沒有被包括在()中,則它的範圍是整個正規表示式。

例:待匹配文字:「w3school」

正規表示式:「w3|ol」

匹配結果:"w3 ol"

>>>分組():被括起來的表示式將作為分組,從表示式左邊開始每遇到乙個分組的左括號'(',編號+1 。另外,分組表示式作為乙個整體,可以後接數量詞。表示式中的|僅在該組中有效。

例:待匹配文字:「w3schoolw3school」

正規表示式:「(w3school)」

匹配結果:"w3schoolw3school"

正規表示式:「w3(sch|ol)」

匹配結果:"w3sch"

>>>(?p...) : 分組,除了原有的編號外在指定乙個額外的別名。

>>>(?p=): 引用別名為的分組匹配到的字串。

python 自1.5版本起增加了re 模組,它提供 perl 風格的正規表示式模式。re 模組使 python 語言擁有全部的正規表示式功能。

re模組中一些重要的函式,如下圖:

這個方法是pattern類的工廠方法,用於將字串形式的正規表示式編譯為pattern物件。 第二個引數flag是匹配模式,取值可以使用按位或運算子'|'表示同時生效,比如re.i | re.m。

正規表示式修飾符 - 可選標誌

舉例:b=re.compile(r"\d+\.\d*", re.i | re.m)

2、re.search(pattern, string[, flags]

這個方法用於查詢字串中可以匹配成功的子串。從string的pos下標處起嘗試匹配pattern,如果pattern結束時仍可匹配,則返回乙個match物件;若無法匹配,則將pos加1後重新嘗試匹配;直到pos=endpos時仍無法匹配則返回none。pos和endpos的預設值分別為0和len(string));re.search()無法指定這兩個引數,引數flags用於編譯pattern時指定匹配模式。

按照能夠匹配的子串將string分割後返回列表。maxsplit用於指定最大分割次數,不指定將全部分割。

搜尋string,以列表形式返回全部能匹配的子串。

使用給定的替換內容將匹配模式的子符串(最左端並且重疊子字串)替換掉。

可以對字串中所有可能被解釋為正則運算子的字元進行轉義的應用函式。如果字串很長且包含很多特殊字元,而你又不想輸入一大堆反斜線,可以使用這個函式。

re.escape

以上出處:

python正規表示式元字元 正規表示式

字元 描述將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了 regexp 物件的 multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束...

Python 正規表示式

1.在python中,所有和正規表示式相關的功能都包含在re模組中。2.字元 表示 字串的末尾 如 road 則表示 只有當 road 出現在乙個字串的尾部時才會匹配。3.字元 表示 字元中的開始 如 road 則表示 只有當 road 出現在乙個字串的頭部時才會匹配。4.利用re.sub函式對字串...

Python正規表示式

學習python自然而然就不得不面對正規表示式這個難題。當初在沒有學習python之前,自己也曾經嘗試著學習過正規表示式,但是那時候感覺很麻煩,很難懂,結果就是不了了之。但是現在學習python我用的書是 python基礎教程 第二版 這本書中對re模組的講解很簡單易懂,內容不多但起碼把人領進門了,...