我最近正在尝试使用模板引擎,但在正则表达式方面处于非常早期的阶段。
我的模板引擎的第一步应该是提取所有模板结构。所以我写了以下正则表达式:
# 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>'}
有人知道如何使用正则表达式实现我的目标吗?
请您参考如下方法:
Regular expression quantifiers默认情况下是贪婪的。通过向其附加 ? 来使用 * 的非贪婪变体:
r'({[%|{](.*?)[}|%]})'
或者使用否定字符类来排除结束分隔符。
顺便说一句:character class [a|b] 不代表 a 或 b,而是 一组 { a, |, b} 因为 | 不被解释为交替而是文字性格。
