詳解 Python3 正規表示式(五)

2022-08-19 20:48:11 字數 1196 閱讀 9296

本文翻譯自:

博主對此做了一些註明和修改 ^_^

精心設計的正規表示式可能劃分很多組,這些組不僅可以匹配相關的子串,還能夠對正規表示式本身進行分組和結構化。在複雜的正規表示式中,由於有太多的組,因此通過組的序號來跟蹤和使用變得困難。有兩個新的功能可以幫你解決這個問題——非捕捕獲組和命名組——它們都使用了乙個公共的正規表示式擴充套件語法。我們先來看看這個表示式擴充套件語法是什麼。

正規表示式的擴充套件語法

眾所周知,perl5 為標準的正規表示式增加了許多強大的功能。perl 的開發者們並不能選擇乙個新的元字元或者通過反斜槓構造乙個新的特殊序列來實現擴充套件功能。因為這樣會和標準的正規表示式發生衝突。比如你想選擇 & 作為擴充套件功能的元字元(在標準正規表示式中,& 沒有意義),但這樣的話,已經按照標準語法寫出來的正規表示式就不得不修改,因為它們中包含的 '&' 意願上只是把它當做普通字元匹配而已。

注:看起來很是頭疼的相容性問題,perl 的開發者們是如何解決的呢?請接著看......

最終,perl 的開發者們決定使用 (?...) 作為擴充套件語法。問號 ? 緊跟在左小括號 ( 後邊,本身是乙個語法錯誤的寫法,因為 ? 前邊沒有任何東西可以重複,所以這樣就解決了相容性的問題(理由是語法正確的正規表示式肯定不會這麼寫嘛~)。然後,緊跟在 ? 後邊的字元則表示哪些擴充套件語法會使用。例如 (?=foo) 表示一種新的擴充套件功能(前向斷言),(?:foo) 則表示另一種擴充套件功能(乙個包含子串 foo 的非捕獲組)。

python 支援 perl 的一些擴充套件語法,並且在此基礎上還增加了乙個擴充套件語法。如果緊跟在問號 ? 後邊的是 p,那麼可以肯定這是乙個 python 的擴充套件語法。

好,既然我們已經知道了如何對正規表示式的標準語法進行擴充套件,那我們回來看看這些擴充套件語法在複雜的正規表示式中是如何應用的。

非捕獲組

第乙個我們要講的是非捕獲組。有時候你只是需要用乙個組來表示部分正規表示式,你並不需要這個組去匹配任何東西,這時你可以通過非捕獲組來明確表示你的意圖。非捕獲組的語法是 (?...),這個 ... 你可以替換為任何正規表示式。

注:「捕獲」就是匹配的意思啦,普通的子組都是捕獲組,因為它們能從字串中匹配到資料。

除了你不能

python 3 正規表示式詳解

的作用就是匹配前乙個字元0次或者是無限次 in 5 ma re.match r a z a z a 匹配0次 in 6 ma out 6 sre.sre match at in 7 ma.group out 7 a in 8 ma re.match r a z a z asdkjljfsjdfoid...

python3正規表示式

正規表示式,又稱規則表示式。英語 regular expression,在 中常簡寫為regex regexp或re 電腦科學的乙個概念。正規表示式通常被用來檢索 替換那些符合某個模式 規則 的文字。正規表示式是對字串操作的一種邏輯公式,就是用事先定義好的一些特定字元 及這些特定字元的組合,組成乙個...

Python3 正規表示式

常用的匹配模式 正規表示式是乙個特殊的字串行,它能幫助你方便的檢查乙個字串是否與某種模式匹配。re 模組使 python 語言擁有全部的正規表示式功能。re.match函式 re.match 嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,match 就返回none。re.match...