代碼:
str = '<br><br />A<br />B'
print(re.sub(r'<br.*?>\w$', '', str))
預計返回<br><br />A
,但它返回一個空字符串''
!
有什麼建議嗎?
代碼:
str = '<br><br />A<br />B'
print(re.sub(r'<br.*?>\w$', '', str))
預計返回<br><br />A
,但它返回一個空字符串''
!
有什麼建議嗎?
貪婪從左到右工作,但沒有其他方式。它基本上意味着「不匹配,除非你不匹配」。以下是發生了什麼事情:
<br
。.*?
現在被忽略,它很懶。>
,併成功。\w
並失敗。現在很有趣 - 引擎開始回溯,並看到.*?
規則。在這種情況下,.
可以匹配第一個>
,所以這場比賽仍然有希望。>\w
可以匹配,但$
失敗。同樣,發動機回來懶.*
規則,並保持匹配,直到與<br><br />A<br />B
幸運的是,有一個簡單的解決方案:通過更換<br[^>]*>\w$
你不讓你的標籤之外匹配,所以它應該取代最後一次出現。
嚴格來說,這對HTML並不適用,因爲標籤屬性可以包含>
個字符,但我認爲這只是一個示例。
非貪心不會像以後那樣開始。它與第一個<br
相匹配,並且將非貪婪地匹配其餘部分,因爲您指定$
,實際上需要轉到字符串的末尾。
爲了使它工作,你想要的方式,使用
/<br[^<]*?>\w$/
但通常不建議使用正則表達式來解析HTML,一些屬性值可以在它<
或>
。
請不要使用`str`作爲變量名稱。 – 2010-11-25 06:03:10