匹配所有内容,直到结束降价标记

时间:2017-08-10 18:23:06

标签: regex python-2.7 markdown

我想匹配markdown标签的内容,但是当字符串中有多个相同的标签时我会遇到麻烦。

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 个答案:

答案 0 :(得分:1)

你不需要任何后视或前瞻。如果您的标签没有嵌套,那么您可以在此正则表达式中使用延迟量词匹配:

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

RegEx分手

\[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]']