2017-10-05 4 views
0

j'ai des chaînes de modèle pour formating avec des variables de substitution des noms, commeTrouver tous les noms de substitution qui sont utilisés pour la substitution dans la chaîne

mystr = "Some {title} text {body}" 
mystr_ready = mystr.format(title='abc', body='bcd') 

Il peut y avoir beaucoup de différentes variables de substitution noms {} là, nous ne connaître leurs noms à chaque fois, donc avant que je les prenne de la base de données pour la substitution, j'ai besoin de connaître leurs noms en premier (prendre toutes les variantes de l'énorme table dans la base de données est trop lent).

donc je dois réaliser cette logique:

mystr = "Some {title} text {body}" 
subs = SOMETHING(mystr) # title, body 

Je sais que cela peut être résolu avec des expressions régulières, mais je suppose qu'il peut y avoir une solution plus élégante et pythonique.

+0

Je pense que la meilleure solution serait d'utiliser regex. Vous pourriez être capable de l'écrire sans regex, mais ce serait essentiellement du code python pour faire la même chose que regex, mais beaucoup plus difficile, –

Répondre

3

Utilisez le string.Formatter:

import string 

parser = string.Formatter().parse 

def fmt_fields(fmt): 
    return [f[1] for f in parser(fmt) if f[1] is not None] 

print(fmt_fields("Some {title} text {body}")) 
+0

Vous pourriez vouloir supprimer le 'None' qui apparaîtrait à la fin si le dernier chose dans le format n'étaient pas un remplacement. – rici

+0

@rici Merci! J'ai mis à jour le code. – VPfB

+0

Merci beaucoup, je savais que Python pourrait avoir une telle solution facile et agréable! :-) – DaneSoul