我想匹配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库。任何帮助表示赞赏。
答案 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]']