python 正規表示式

2022-03-05 16:35:46 字數 2396 閱讀 8297

正規表示式描述了一種字串匹配的模式。

a. 資料驗證

驗證手機號,銀行卡號等。

b. 替換文字

正則查詢特定源文字,將其替換為目標文字。

c. 提取子串

從給定字串中提取目標子串。

\s  匹配任何單個空白字元,包括tab鍵和換行符。

\s  匹配任何非空白字元。

\w  匹配包括[a-za-z0-9_]。(大小寫英文本母、數字、下劃線)

\w  匹配任何非\w中的字元。(除了大小寫英文本母、陣列、下劃線之外的特殊字元)

\d  匹配包括[0-9]的數字。

\d 匹配任何非\d的數字。

a. 特殊字元

$  匹配字串的結束位置,若設定了匹配的多行屬性,$也匹配\n,\r。

^  匹配字串的開始位置。 

()  標記子表示式的開始和結束。

+  匹配前面的子表示式1次或多次。

*  匹配前面的子表示式0次或多次。

?  匹配前面的子表示式0次或1次。

.  匹配除了換行符\n之外的任意單字元。

|  標記兩項之間的選擇。

[  方括號表示式的開始標記。

準確匹配,匹配前面的子表示式n次。

匹配前面的子表示式至少n次。

匹配前面的子表示式,至少n次,至多m次。

*和+限定符都是貪婪的,它們盡可能多的匹配字元。只有在它們後面加乙個?,就能實現非貪婪或最小匹配。

例:對於正則 [a-z]+,若對字串abcde匹配,則會盡可能匹配最長的結果,即貪婪匹配,匹配結果為:abcde。若是對abcde使用正則[a-z]+?匹配,則會匹配最短滿足條件的結果,為a

c. 定位符

$  標記字串的開始。

^  標記字串的結尾。

\b  匹配乙個單詞的邊界。即單詞與空格之間的位置。

例如:/\bhel/  可以匹配 "hello world",但是不能匹配"haahel world",因為hel需要出現在單詞的開頭。

/hel\b/ 無法匹配"hello world",但是可以匹配"ollhel world",因為hel需要出現在單詞的末尾。

\b  匹配非單詞的邊界。

例如:/\bhel/  可以匹配 "haahelooo world",也可以匹配 "ooohelhello world",但是不能匹配"hello world",因為hel匹配單詞的非邊界。

因此,\b非單詞邊界運算子,與位置無關,匹配不關心是在單詞的開頭還是結尾。

用圓括號將一些項括起來,相鄰選擇項之間用 | 分隔。但是使用圓括號有乙個缺點,就是相關的匹配會被快取,此時可以用?:加在第乙個選項的前面,從而消除這種***。

例如:匹配aaba格式的字串,且將a提取出來,定義正則="(\w)\1(?:\w)\1",可以滿足要求。

就是對前面出現的分組進行再一次引用。反向引用最有用的應用就是匹配字串中重複出現的內容。

例如:匹配aa形式的字串,定義正則="(\w)\1",使用反向表示式\1表示引用前面的子表示式\w,而不用重複寫,尤其在正規表示式比較繁雜的時候更有效。

re.compile(pattern, flags)可以編譯正規表示式,其中flags是如下一些常量引數,如果要設定多個,可以用|分隔,例如:re.compile(r"^abc(\d)898$", re.i|re.m),表示不區分大小寫,並且採用多行匹配。

r 表示原字串的意思,不用加轉義字元。

re.i  ignorecase,表示不區分大小寫。

re.m multiline,表示多行匹配。

(pattern) 捕獲組,表示匹配pattern並且捕獲匹配結果。

(?:pattern) 非捕獲組,匹配pattern但是不需要捕獲匹配結果。消耗字元。

(?=pattern) 非捕獲組,正向肯定預查。lookahead,在任何匹配pattern的字串開始處匹配查詢字串,匹配結果不儲存,預查不消耗字元。

例:hello(?=world)  的意思是:匹配hello,且後面緊跟的是world。

(?!pattern) 非捕獲組,正向否定預查。lookahead,在任何不匹配pattern的字串開始處匹配查詢字串,匹配結果不儲存,預查不消耗字元。

例:[0-9a-z](?!aa)  的意思是:匹配2個字元,且後面緊跟的不是aa。

例:a(?!a)  的意思是:匹配a,且a後面跟的不是a。

(?<=pattern) 非捕獲組,反向肯定預查。lookbehind,與正向肯定預查類似,只是方向相反。pattern中不能有+,*等不定長度的量詞。預查不消耗字元。

例:(?<=hello)world  的意思是:匹配world,且world前面是hello。

(?lookbehind,與正向否定預查類似,只是方向相反。pattern中不能有+,*等不定長度的量詞。預查不消耗字元。

例:(?

a. 檢測密碼強度

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