好了,現在的問題是重新開放,我可以做到這一點作爲一個答案,所以......
除非我失去了一些東西,而一旦它只是<br/>
(沒有任何變體),則可以只替換<(?!br/>)
與<
和(?<!<br/)>
與>
這就是它?
在Python,它看起來像這意味着這樣的:
text = re.sub('<(?!br/>)' , '<' , text)
text = re.sub('(?<!<br/)>' , '>' , text)
爲了解釋這是怎麼回事,(?!
...... )
是負前瞻 - 它只有在成功當一個位置相匹配以下文字不是與其包含的子表達式匹配。
(注向前看符號不消耗由他們的子表達式匹配的文本,他們只當它不存在,或者無法覈實。)
同樣,(?<!
... )
是負的樣子背後和做同樣的事情,但使用前面的文字。
但是,lookbeheads與lookaheads(在一些正則表達式實現中)略有不同 - 也就是說,lookbehinds內部的子表達式必須表示固定寬度或有限寬度的匹配。
Python是需要固定寬度的那個 - 所以雖然上面的表達式工作(因爲它總是四個字符),如果它是(?<!<br\s*/?)>
那麼它不會是Python的有效正則表達式,因爲它表示一個可變長度比賽。 (但是,可以將堆疊多個向後看,所以如果需要,您可以手動迭代各種選項。)
我不能也不想安裝外部庫。 – stdio
@stdio你不需要外部庫; Python附帶了開箱即用的ElementTree(lxml提供了更好的實現的API)。 –
XML(像它擴展的SGML)不是一種常規語言(在計算機科學中這個術語的含義 - 如果你已經參加了編譯器設計課程,他們應該進入它)。正則表達式不足以解析它。 –