2017-08-10 99 views
1

我想匹配降價標記的內容,但是在字符串中存在多個相同標記時遇到問題。匹配所有內容直到結束降價標記

string = "[caixa]text here[/caixa] more text [caixa] text [/caixa]"

我要的是遍歷標籤(包括標籤本身),在這種情況下將是:

match1: "[caixa]text here[/caixa]"

match2: "[caixa] text [/caixa]"

我試着負向預測,如\[caixa\].+(?<!\[\/caixa\])\[\/caixa\],但它匹配整個文本,從最初的開始標記到最後一個結束標記。

我在Python中使用re庫。任何幫助表示讚賞。

+1

使用:'R」 \ [caixa \]。+?\ [/ caixa \]''in're.findall' – anubhava

+1

那麼工作,tyvm – arop

回答

1

你不需要任何向後看或向前看。如果你的標籤是不嵌套,那麼你可以在這個表達式使用惰性限定符匹配:

\[caixa\].+?\[/caixa\] 

正則表達式破碎

\[caixa\] # match starting tag "[caixa]" 
.+?   # match one or more of any characters (lazy match) 
\[/caixa\] # match closing tag "[/caixa]" 

代碼:

>>> string = "[caixa]text here[/caixa] more text [caixa] text [/caixa]" 
>>> print re.findall(r'\[caixa\].+?\[/caixa\]', string) 
['[caixa]text here[/caixa]', '[caixa] text [/caixa]'] 
相關問題