2010-11-05 17 views
2

最近我正在試驗模板引擎,並且在正式表達式中處於非常早的階段。Split每次重複之後的正則表達式

我的模板引擎中的第一步應該是提取所有模板結構。所以我寫了下面的正則表達式:

# 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>'} 

任何人知道如何實現自己的目標正則表達式?

回答

3

Regular expression quantifiers默認爲貪婪。無論是通過附加?用它的*非貪婪的變體:

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

或者使用一個否定的字符類排除結束分隔符。

順便說:本character class[a|b]並不意味着要麼ab但集合{a|b}作爲|一個不被解釋爲交替但作爲一個文字字符。

+0

感謝您的精確和快速的答案。感謝。 – nenTi 2010-11-05 18:30:32