2012-04-15 27 views
0

pythonの文字列テンプレートには、テンプレート文字列の変数名を抽出するためのきれいな方法があります。pythonの文字列テンプレートから変数を抽出する

私は、実際にはテンプレートスティングをテキストフィールドに書き込んで、より複雑な他の変数の代わりに変数を代入できるようにしたいと考えています。

だから例えば私は私が私が何かに文字列を変換することができ、変数名の配列を必要とするかもしれない

'$who likes $what' 

変数

t = Template((request.POST['comment'])) 

コメント文字列にユーザー入力されたテンプレートになるだろうlike

{{{who}}} likes {{{what}}} 

多分、これにアプローチするより良い方法があります。

答えて

1
def replaceVars(matchObj): 
    return "{{{%s}}}" % matchObj.groups()[0] 

c = r"\$(\w+)\s*" 

s = "$who likes $what" 

converted = re.sub(c, replaceVars, s) 
+0

これは今のところ最良の方法だと思われます。しかし、私は変数を2回印刷する必要があるので、苦労しています。 {{{{{%s | something%s}}}のようなものです – evolution

+0

'{{{who | somethingwho}}}'と似ていますか?次に、replaceVars関数を変更します。 –

+1

クール - それを得ました - ちょうどneede%(matchObj.groups()[0]、matchObj.groups()[0]) – evolution

3

私は、任意のテンプレート関連のAPIを知っていませんが、正規表現を使用することができます。

>>> import re 
>>> rx = re.compile(r'\$(\w+)') 
>>> rx.sub(r'{{{\1}}}', '$who likes $what') 
'{{{who}}} likes {{{what}}}' 

rx.sub()の最初の引数はで、第二引数に変数の各発生を置き換えます\1は変数の名前に置き換えられます。

関連する問題