1

私のテンプレートエンジンは翻訳します

"some data #{substitution_expression} some other data"

の中へ

"some data" + (substitution_expression) + "some other data"

ただし、「一部のデータ」または「その他のデータ」に二重引用符が含まれている場合、評価は失敗します。これらの引用符の前にスラッシュを追加する必要がありますが、正しい正規表現を思いつくことができません。

何か助けはありますか?

アップデート:

テンプレート エンジンの動作は次のとおりです。

  1. テンプレート文字列を取得します。

    template = 'template string "quoted text" #{expression}'
    
  2. テンプレート文字列を単純な正規表現で次のように変更します。

    template = '"%s"' % re.compile(r'\#{(.*)}').match(r'" + (\1) + "', template)  
    # template == "template string "quoted text"" + (expression) + ""  
    # here is a problem with a "quoted text" - it needs \ before quotes`
    
  3. この文字列はラムダに挿入され、結果コード文字列が評価されています。

    return eval("lambda tpl_args: %s" % modified_template_string)
    
  4. ラムダは後でプログラムで呼び出され、いくつかの tpl_args を使用して結果文字列を生成します。

4

1 に答える 1

1

re.DOTALLフラグを試しましたか?

re.compile(r'\#{(.*)}', re.DOTALL)
于 2012-11-27T22:19:17.323 に答える