2017-10-05 130 views
0

我的模板字符串與名稱替換變量在格式化,像查找其在string用於替代所有替代名稱

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

可以有{}有許多不同的替代變量名,我們不這樣做每次都要知道他們的名字,所以在我將他們從數據庫中取代之前,我需要首先知道他們的名字(從數據庫中巨大的表中取得所有變體太慢)。

所以我需要實現這個邏輯:

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

我知道這可以用正則表達式來解決,但我想可以有更優雅和Python的解決方案。

+0

我認爲最好的解決辦法是使用正則表達式。你也許可以在沒有正則表達式的情況下編寫它,但它基本上是python代碼來做和regex一樣的事情,但是要困難得多, –

回答

3

使用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

你可能想刪除'None',如果最後一個會顯示在最後格式中的東西不是替代品。 – rici

+0

@rici謝謝!我已經更新了代碼。 – VPfB

+0

非常感謝,我知道Python可能有一些這樣簡單而好的解決方案! :-) – DaneSoul