Skip to main content
 首页 » 编程设计

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

2024年09月03日30itcoder

我最近正在尝试使用模板引擎,但在正则表达式方面处于非常早期的阶段。

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

# 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} 因为 | 不被解释为交替而是文字性格。