2017-08-10 47 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]'] 
相关问题