我最近正在尝试使用模板引擎,并且在正常表达的早期阶段陷入困境。
我的模板引擎的第一步应该是提取所有模板结构。所以我写了以下正则表达式:
# 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>'}
任何人都知道如何用正则表达式实现我的目标?
答案 0 :(得分:3)
Regular expression quantifiers是贪婪的。使用*
的非贪婪变体,将?
添加到其中:
r'({[%|{](.*?)[}|%]})'
或者使用否定的字符类来排除结束分隔符。
顺便说一句:character class [a|b]
并不意味着 a
或b
,而是其中一个{ a
,|
,b
} ,因为|
不会被解释为替代,而是作为文字字符。