python 正規表示式

2021-10-10 23:05:34 字數 2379 閱讀 6280

寫在前面:

最開始接觸正規表示式是看了廖師傅的教程。裡面介紹了一些基礎的內容,最近看flask的原始碼,看路由部分的時候又涉及了很多正規表示式的內容,所以準備開個帖子,將正規表示式的內容整理一下,以後遇到的新的內容也新增進來~

當在正規表示式的pattern中使用()將某一部分括起來的時候,就是使用了分組的功能。對匹配成功後返回的match物件,可以呼叫group方法來檢視分組的結果。

>>

> m = re.match(r'^(\d)-(\d)$', '010-54321'

)>>

> m

<_sre.sre_match object; span=

(0, 9), match=

'010-54321'

>

>>

> m.group(0)

'010-12345'

>>

> m.group(1)

'010'

>>

> m.group(2)

'54321'

通過在()裡面新增其它命令,可以更好地實現分組。

給命名分組(?p《組名》pattern)

如標題,通過在分組裡面加(?p《組名》pattern)可以對分組進行命名,這樣的好處是當我們檢視分組內容的時候可以直接通過組命來檢視。

非捕獲匹配(?p:pattern)

不將pettern匹配的內容儲存到group的結果中,通常會在後面跟*+?等。這出現在我們會想將pattern部分作為乙個整體進行判斷,但是不需要將其捕獲的情況下。

下面是werkzeug.routing中解析我們傳入url的正則,通過static、converter、args、variable對分組進行命名,匹配後可以通過group('static')的方式檢視匹配內容。同時整個的轉換器的部分使用了非捕獲匹配,是為了將其作為乙個整體,加進行匹配。

_rule_re = re.

compile

( r"""

(?p[^<]*) # static rule data

<

(?:(?p[a-za-z_][a-za-z0-9_]*) # converter name

(?:\((?p.*?)\))? # converter arguments

\: # variable delimiter

)?(?p[a-za-z_][a-za-z0-9_]*) # variable name

>

""", re.verbose,

)

非捕獲匹配,正向肯定預查(?p=pattern)

正向肯定預查(look ahead positive assert),匹配pattern前面的位置。這是乙個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。

例如,「windows(?=95|98|nt|2000)「能匹配"windows2000"中的"windows」,但不能匹配"windows3.1"中的"windows」。預查不消耗字元,也就是說,在乙個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜尋,而不是從包含預查的字元之後開始。

非捕獲匹配,正向否定預查(?p!pattern)

正向否定預查(negative assert),在任何不匹配pattern的字串開始處匹配查詢字串。這是乙個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。

例如"windows(?!95|98|nt|2000)「能匹配"windows3.1"中的"windows」,但不能匹配"windows2000"中的"windows"。預查不消耗字元,也就是說,在乙個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜尋,而不是從包含預查的字元之後開始。

非捕獲匹配,反向肯定預查(?p<=pattern)

反向(look behind)肯定預查,與正向肯定預查類似,只是方向相反。

例如,"(?<=95|98|nt|2000)windows"能匹配"2000windows"中的"windows",但不能匹配"3.1windows"中的"windows"。

非捕獲匹配,反向否定預查(?p————更新中。

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