python 正規表示式

2022-08-14 13:39:16 字數 2651 閱讀 9394

python在1.5版本時使用re模組來處理正規表示式,提供perl風格的正則模式。

用處:編譯正規表示式,使用re.compile

函式compile(pattern [,flags])

引數pattern,模式字串,即正規表示式。

可選引數flags,標誌位,用來修改正規表示式的匹配方式

返回乙個pattern物件

標誌位引數:

re.i(re.ignorecase)  使匹配對大小寫不敏感

re.l(re.local)  做本地化識別匹配

re.m(re.multiline)  多行匹配,影響^和$

re.s(re.dotall)  使匹配包括換行在內的所有字元

re.u(re.unicode)  根據unicode字符集解析字元,影響\w,\w,\b,\b

re.x(re.verbose)  通過給予你更靈活的格式以便你將正規表示式寫得更易於理解

如:

string=r'wan\w'

html='citizen wang,always fall in love with neighbour, wang'

pa=re.compile(string,re.i)

li=pa.findall(html)

print(li)

最後返回乙個列表:['wang', 'wang']

注:\w,表示匹配任意單詞字元,和[a-za-z0-9_]等價(包括下劃線)

re.match()函式

總是從字串開頭匹配,並返回match物件。通過match物件的group()或group(0)獲得匹配的結果。

re.match(pattern,string[,flags=0])

如:>>>ma=re.match('\w','_hello')

>>>ma.group()

最後返回:'-'

若:>>>ma=re.match('\w','?hello')

>>>ma.group()

最後返回:attributeerror: 'nonetype' object has no attribute 'group'

re.search()函式

對整個字串進行搜尋匹配,返回第乙個匹配的match物件。

re.search(pattern,string[,flags=0])

>>>ma=re.match('e\wl','_hello')

>>>ma.group()

最後返回:ell

re.split()

分割字串

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

單一分割符時與str.split(self, /, sep=none, maxsplit=-1)方法一樣

re.sub()

sub是substitute,即字串替換

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

如:string='a 111 b 111' 將111替換成222

也可以用str.replace(self, old, new, count=-1, /)

常用元字元:

.    匹配乙個任意字元(除換行以外) ,要匹配包括換行[.\n]

\d    匹配乙個數字字元,等價[0-9] 

\s    匹配乙個任意空白字元 ,等價於[\f\n\r\t\v]

\w    匹配乙個任意單詞字元和下劃線,等價於[a-za-z0-9_]

\b    匹配乙個單詞邊界,不匹配任何實際字元,看不到。

^    匹配字串的開始

$    匹配字串的結束

|    a|b  表示匹配正規表示式 a 或者 b 

重複:*    重複0次或多次

+    重複1次或多次

?    重複0次或1次

重複n次

重複n次或多次

重複n次到m次

反義:\d    \s    \w    \b    [^x]

字符集:

匹配乙個字元,這字元是字符集中的任意乙個字元。

例如:[abc], [\d+]

[字元1-字元2] --> 匹配乙個字元,這個字元是unicode編碼值在字元1到字元2中的任意乙個字元;要求字元1的編碼值要小於字元2

例如:[1-9] --> 數字1到9 [a-z] --> 小寫字母 [a-z] --> 大寫字母

[\u4e00-\u9fa5] --> 匹配所有的漢字 

注意:-在中括號中,如果放在兩個字元之間表示範圍。

分組:()

懶惰匹配:在重複限定符後面加?號。

當正規表示式中包含能接受重複的限定符時,通常的行為是(在使整個表示式能得到匹配的前提下)匹配盡可能多的字元。

例:a.*b,它將會匹配最長的以a開始,以b結束的字串。如果用它來搜尋aabab的話,它會匹配整個字串aabab。這被稱為貪婪匹配。

有時,我們更需要懶惰匹配,也就是匹配盡可能少的字元。前面給出的限定符都可以被轉化為懶惰匹配模式,只要在它後面加上乙個問號?。這樣.*?就意味著匹配任意數

量的重複,但是在能使整個匹配成功的前提下使用最少的重複。

例:a.*?b匹配最短的,以a開始,以b結束的字串。如果把它應用於aabab的話,它會匹配aab(第一到第三個字元)和ab(第四到第五個字元)。

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模組的講解很簡單易懂,內容不多但起碼把人領進門了,...