正規表示式 python

2021-10-16 16:46:37 字數 3075 閱讀 8665

1.元字元: . ^ $ * + ? [ ] \ | ( )

2.方括號 [ ] :指定乙個【字元類】,用來存放你希望匹配的字元集合。乙個連續範圍內的字元也可以用橫槓『-』連線首尾兩個字元指定。 比如,[abc]可以匹配 a,b 或 c,[a-c]也有同樣的效果。

2.1元字元在方括號內不會被啟用!比如,[akm$]可以匹配字元『a』,『k』, 『m』或者』』,『

』,『』,

『』元字元會失去它的特性,匹配自身。

2.2匹配未在方括號中列出的字元,這需要在方括號中的第乙個字元前面加上『』脫字符號,方括號字元集合之外的字元可以簡單地匹配『』符號。比如,[^5]可以匹配任何 不是『5』的字元。

3.反斜槓\:如果反斜槓後面跟著乙個元字元,那麼元字元的 「特殊功能」將不會被觸發。比如需要去匹配乙個 [ 或者 \ ,可以在它們之前加上反 斜槓 \ 以去掉它們的特殊語義:\ [ 或者 \。

3.1有一些特殊的、常用的序列也以反斜槓開始,比如十進位制數字,或者非空白的字元集合。\w 匹配所有字母數字字元,如果正規表示式以位元組的形式表示, 這相當於字元類[a-za-z0-9]。如果正規表示式是乙個字串,\w 會匹配所有在 unicode 資料 庫中標記的為字母的字元。你在編譯正規表示式的時候可以通過提供 re.ascii 標誌進一步限制 \w 的定義。下面列舉一些反斜槓加字元構成的特殊序列(並不完整)。

\d:匹配所有十進位制數字,相當於字元類[0-9]

\d:匹配所有非數字字元,相當於字元類[^0-9]

\s:匹配所有空白字元(包括製表符、換行符等),相當於字元類[\t\n\r\f\v]

\s:匹配所有非空白字元,相當於字元類[^\t\n\r\f\v]

\w:匹配所有字母數字字元,相當於字元類[a-za-z0-9]

\w:匹配所有非字母數字字元,相當於字元類[^a-za-z0-9]

這些序列可以被包含在乙個字元類中,比如,[\s,.]是乙個字元類,可以匹配任何空白字 符,或者『,』和『.』。1.元字元星號 * :它並不匹配它自身,而是指定它的前乙個字元重複 0 次或者多次,而不是確定的多少次。比如,ca*t 可以匹配 ct(有 0 個 a 字元)、cat(有 1 個 a 字元)、caaat(有 3 個 a 字元) 等等。正則表 達式引擎總是先盡可能遠的匹配重複的字元,如果不匹配,他將逐步回退,然後再次嘗試去 匹配 re 剩餘的部分,直到重複字元的個數為 0,如果這時仍然匹配失敗,引擎就會得出結 論:這個字串不匹配這個 re。

2.元字元加號 + :它指定匹配它前面的字元 1 次或者多次。星號 * 匹配 0 次或者多次,所以被匹配的內容可能壓根兒 就不出現,但是加號 + 要求重複的字元至少出現 1 次。舉乙個簡單的例子,ca+t 可以匹配 cat(1 個 a 字元)、caaat(3 個 a 字元),但是它不匹配 ct。

3.問號 ? : 它用於指定匹配它前面的字元 0 次或者 1 次,你可以認為它用於標誌乙個可選的字元。比如,home-?brew 可以匹配 homebrew 或者 home-brew。

4.最靈活的表示重複的限定符: 。表示它前面的字元至少重複 m 次,最多重複 n 次。比如,a/b 可以匹配 a/b,a//b 和 a///b。但是 它不匹配 ab,因為 ab 沒有斜槓,也不匹配 ab,因為它有 4 個斜槓超過了 3 個。省略 m 將預設下限為 0,省略 n 將預設無上限。(譯者注:還有一種使用方式,指定它前面的字元重複 n 次,與星號 * 作用一樣,與加號 + 作用一樣,與問號 ? 作用一樣。然而,在實際應用中,首選星號 * 、加號 + 和問號 ? ,因為它們更短,效率更高。1.「i」或操作符:如果 a 和 b 都是正規表示式,a|b 將匹配任何能夠匹配 a 或者 b 的字串。 為了讓或操作符 | 在多字元的字串匹配中工作地更加合理,它的優先順序很低,例如 crow | servo 將會匹配 crow 或者 servo,而不是 cro 然後[w] or [s]。

如果需要匹配字元『|』,使用 |,或者將它放在乙個字元類中,[|]。

2.「^」:匹配一行的開頭位置。如果沒有設定 multiline 標誌,它只匹配字串的開頭位置,如果設定了 multiline 標誌,它將匹配字串中每一行(根據換行符)的開頭。舉個例子,如果你只想在一行的開頭位置匹配 from 這個單詞,這個正規表示式應該是 ^from。

3.「$」:匹配一行的結尾,它每當遇到換行符也會進行匹配。

4.\a:只匹配字串的開始位置。如果不在 multiline 模式下,\a 和 ^ 的有一樣的效果。在 multiline 模式下,它們是不一樣的:\a 還是只匹配字串的開頭,而 ^ 將匹配字串每 一行的開頭,即每乙個換行符之後也會進行匹配。

5.\z: 只匹配字串的結尾。

6.\b: 單詞邊界。這是乙個零寬斷言,只匹配乙個單詞的開始位置或者結束位置。單詞是由字母或者數字構成的序列,所以乙個單詞由空格或者非字母數字字元作為結束標誌。下述例子只有當 class 作為單獨的乙個完整單詞的時候才會被匹配,當 class 是其他單詞的一部分時不會被匹配。

7.\b: 這個零寬斷言與\b 的意義相反,它匹配非單詞邊界。1.匹配乙個反斜槓字元『\』,你需要寫四個反斜槓『\\。解決方法是使用python中的原始字串,即在字串最前面加上字母 r,這樣字串中的反斜槓都會被去掉特殊語義,看做普通字元。比如,字串 r」\n」 是 包含『\』和『n』兩個字元的字串,而字串 「\n」 是只有乙個換行符的字串。正規表示式通常使用 python 中的原始字串來表示。

匹配物件例項也有一些方法和屬性,這裡列出最重要的幾個:

match()方法是判斷正規表示式是否從開始處匹配字串,所以start()方法總是返回 0。然而,search()方法就不一樣了,它掃瞄整個字串,匹配的子字串的開始位置不一定是 0。

findall()方法需要在它返回結果之前建立出整個列表。但是finditer()方法將匹配物件作為迭代器返回(譯者注:迭代器的方式更節省記憶體,效率更高)。

2.模組級別的函式:

不需要去建立乙個匹配物件來呼叫它的方法,re 模組中也提供一些全域性函式比如 match()、search()、findadd()、sub()等等。這些函式的第乙個引數是正規表示式字串,其他引數跟模式物件同名的方法採用一樣的引數,返回值也一樣,都是返回 none。由於內部緩衝機制,兩者的效率不差上下。

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