我已經試過這爲斜體:連續的,相互衝突的正則表達式替換
r = re.compile(r"(\*[^ ]+\*)")
r.sub(r'<i>"\1"</i>', foo)
,但它不工作,因爲我在正則表達式知道肯定有人會馬上看到。
我已經試過這爲斜體:連續的,相互衝突的正則表達式替換
r = re.compile(r"(\*[^ ]+\*)")
r.sub(r'<i>"\1"</i>', foo)
,但它不工作,因爲我在正則表達式知道肯定有人會馬上看到。
你的正則表達式和替換需要一些調整。
r = re.compile(r"(\*[^ ]+\*)")
你在這裏捕獲得太多 - 星號保存在\1
。
r.sub(r'<i>"\1"</i>', foo)
您在這裏代替了太多 - 雙引號標記包含在替換中。例如:
r.sub(r'<i>"\1"</i>', '*foo*') # -> '<i>"*foo*"</i>'
嘗試這樣:
foo = '***foo***'
bold = re.compile(r'''\*\*([^ ]+)\*\*''')
ital = re.compile(r'''\*([^ ]+)\*''')
ital.sub(r'''<i>\1</i>''', bold.sub(r'''<b>\1</b>''', foo)) # '<b><i>foo</i></b>'
工程就像一個魅力,謝謝。 – shino 2010-07-25 06:02:42
如果切換替代順序,它很容易工作。首先處理大膽的案例將防止斜體接管。
正則表達式是特別壞的這種任務,通常是因爲他們從來正是你想要的貪婪量。在你的單個單詞的特定情況下,你會好起來的,但是如果你正試圖重塑Markdown,那麼你需要一個真正的解析器,而正則表達式不是解析器(儘管很多人希望它們是)。 – msw 2010-07-23 01:47:25