python 正規表示式細節

2022-02-06 03:42:58 字數 860 閱讀 4534

所謂零寬斷言就是並不去真正的匹配字串文字,而僅僅是匹配對應的位置。

正規表示式中有很多這樣的斷言,常見的如匹配字串或者行的起始位置 ^ 和 /a,匹配字串或者行的末尾 $ 和 /z,單詞邊界/b等等。這些簡單的就不說了,今天主要說一下界定的使用方法。

表示式結構:

(?=exp)

(?<=<(\w+)>).*(?=<\/\1>) 匹配不包含屬性的簡單html標籤內裡的內容。

在python3.7下測試:

import re

str = "(?<=<(\w+)>).*(?=(<\/\1>))"

re = re.compile(str)

error: look-behind requires fixed-width pattern

錯誤說明:前向界定括號中的表示式必須是常值,也就是不可以在前向界定的括號裡寫正則式。

建議:安裝 regex 模組替代原有的 re,regex修正了re不少的bug,只要 import regex as re 就跟內建的re用法一樣了

與大多數程式語言相同,正規表示式裡使用"\"作為轉義字元,這就可能造成反斜槓困擾。

假如你需要匹配文字中的字元"\",那麼使用程式語言表示的正規表示式裡將需要4個反斜槓"\\\\":

第乙個和第三個用於在程式語言裡將第二個和第四個轉義成反斜槓,

轉換成兩個反斜槓\\後再在正規表示式裡轉義成乙個反斜槓用來匹配反斜槓\。

這樣顯然是非常麻煩的。

python裡的原生字串很好地解決了這個問題,這個例子中的正規表示式可以使用r"\\"表示。

同樣,匹配乙個數字的"\\d"可以寫成r"\d"。

有了原生字串,媽媽再也不用擔心我的反斜槓問題~

正規表示式細節

在正規表示式裡面表示可選擇有兩種表示式 1 ab ccc 匹配accc 或者bccc 2 a b ccc 匹配accc 或者bccc 另外 兩者之間沒有什麼區別 true false 說明捕獲組中記憶體中儲存的是捕獲的匹配內容,而不是捕獲的正規表示式片段 但是我們很快發現,在 只能匹配單個字元,如 ...

python正規表示式元字元 正規表示式

字元 描述將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了 regexp 物件的 multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束...

Python 正規表示式

1.在python中,所有和正規表示式相關的功能都包含在re模組中。2.字元 表示 字串的末尾 如 road 則表示 只有當 road 出現在乙個字串的尾部時才會匹配。3.字元 表示 字元中的開始 如 road 則表示 只有當 road 出現在乙個字串的頭部時才會匹配。4.利用re.sub函式對字串...