2012-04-15 16 views
0

Für Python String-Vorlage gibt es eine saubere Möglichkeit, die Variablennamen in der Vorlage Zeichenfolge zu extrahieren.extrahieren Variablen aus Python String-Vorlage

Ich möchte in der Lage sein, Vorlagenstiche in ein Textfeld zu schreiben und dann die Variablen für andere komplexere Variablen zu ersetzen.

So zum Beispiel Benutzer eingegebene Vorlage in eine Variable

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

des Kommentartext vielleicht

'$who likes $what' 

Ich brauche eine Reihe von Variablen-Namen, so kann ich die Zeichenfolge in etwas umwandeln würde ich bekommen wie

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

Vielleicht gibt es auch einen besseren Weg, dies zu nähern.

Antwort

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

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

s = "$who likes $what" 

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

Dies scheint der beste Weg jetzt zu sein. Ich kämpfe jedoch, da ich die Variable zweimal drucken muss. Es ist eher wie {{{% s | etwas% s}}} – evolution

+0

Wie '{{{which | somethingwho}}}', zum Beispiel? Dann ändern Sie einfach die Funktion replaceVars. –

+1

cool - hab es - nur nee% (matchObj.groups() [0], matchObj.groups() [0]) – evolution

3

ich weiß nicht jeder Vorlage bezogenen api, aber Sie einen regulären Ausdruck verwenden:

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

das erste Argument rx.sub() jedes Vorkommen ersetzt einer Variablen im zweiten Argument, mit \1 wird durch den Namen der Variablen ersetzt.

Verwandte Themen