每次重复后拆分正则表达式

时间:2010-11-05 17:58:59

标签: python regex templates

我最近正在尝试使用模板引擎,并且在正常表达的早期阶段陷入困境。

我的模板引擎的第一步应该是提取所有模板结构。所以我写了以下正则表达式:

# Split all relevant parts apart to merger them later on.
exp_tags = re.compile(r'({[%|{](.*)[}|%]})')
print exp_tags.split(body)

工作正常,直到2个模板结构在一行中。然后表达式将它们合并在一起,并且不会逐个拆分。

示例:

<section>
{{title}}{{text}}
</section>

应该导致:

{'<section>', '{{title}}', 'title', '{{text}}', 'text', '</section>'}

但结果是:

{'<section>', '{{title}}{{text}}', 'title}}{{text', '</section>'}

任何人都知道如何用正则表达式实现我的目标?

1 个答案:

答案 0 :(得分:3)

默认情况下,

Regular expression quantifiers是贪婪的。使用*的非贪婪变体,将?添加到其中:

r'({[%|{](.*?)[}|%]})'

或者使用否定的字符类来排除结束分隔符。

顺便说一句:character class [a|b]并不意味着 ab ,而是其中一个{ a|b} ,因为|不会被解释为替代,而是作为文字字符。