寫在前面:
最開始接觸正規表示式是看了廖師傅的教程。裡面介紹了一些基礎的內容,最近看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模組的講解很簡單易懂,內容不多但起碼把人領進門了,...