2016-03-31 69 views
3

假設我有一個字符串'ad>ad>ad>>ad',我想在'>'(而不是'>>'字符)上對此進行分割。剛拿起的正則表達式,想知道是否有一種方法(特殊字符),爲了將所匹配的表達的特定部分,而不是對整個匹配的表達式分割,例如正則表達式可能是:匹配正則表達式的一部分上的分割字符串(python)

re.split('[^>]>[^>]', 'ad>ad>ad>>ad')

你可以得到它在括號中的字符分裂[^>](>)[^>]

回答

1

您需要使用lookarounds:

re.split(r'(?<!>)>(?!>)', 'ad>ad>ad>>ad') 

regex demo

(?<!>)>(?!>)模式的匹配不與一個<前面(由於負回顧後(?<!>))一>,這是不接着是<(由於負向預測(?!>))。

由於lookarounds不消耗字符(不像否定(而且正面)的字符類,像[^>]),我們只能在沒有「感人」的周圍符號的象徵<匹配和拆分。

1

\b>\b

這種嘗試將檢查單>非空白字符包圍。由於問題中的字符串是連續的字符流,檢查字邊界與\b是最簡單的方法。

Regex101 Demo

+0

如果什麼單'>'被封閉用空格,或有隻是右邊或左邊的空間?然後,它不會工作。 –

+0

@WiktorStribiżew:這不在OP的規範中。如果是這種情況,那麼OP應該指定所有這樣的**案例**。 –

+0

我把另一個標記爲正確,因爲它反映了我之後的完全匹配(但沒有消費,這對我來說是新的。) – dpdenton

相關問題