2014-09-04 85 views
2

的問題在Python字符串具有替代值替換 「令牌」

想象接收的字符串的腳本:

http://whatever.org/[email protected]@&[email protected]@

...和令牌的列表:

['arg:Title=SampleTitle', 'arg:Note=SampleNote']

什麼是插入這些令牌的最Pythonic方式S插入的字符串,例如,當使用上述例子中,產生下列操作:

http://whatever.org/?title=SampleTitle&note=SampleNote

我的思想

  1. 遍歷該列表,並且對於它包含每個字符串,拆分出令牌名稱,並在發現的每個實例@TOKEN_NAME上執行正則表達式替換。

  2. 使用某種模板機制(類似於Ruby的ERB.template)。

幫助?

我對Python相當陌生,很喜歡專家的看法。謝謝!

回答

8

要使用Python化解決方案,採用str.format規格爲format string syntax

>>> template = "http://whatever.org/?title={Title}&note={Note}" 
>>> template.format(Title="SampleTitle", Note="SampleNote") 
'http://whatever.org/?title=SampleTitle&note=SampleNote' 

您也可以解壓的命名參數的字典:

>>> template.format(**{"Title": "SampleTitle", "Note": "SampleNote"}) 
'http://whatever.org/?title=SampleTitle&note=SampleNote' 

如果你堅持你的輸入格式,你可以很容易地切換到更有用的東西regular expression

>>> import re 
>>> s = "http://whatever.org/[email protected]@&[email protected]@" 
>>> re.sub(r"@(\w+?)@", r"{\1}", s) 
'http://whatever.org/?title={Title}&note={Note}' 

(見正則表達式的解釋here

和令牌處理成一個詞典,也:

>>> tokens = ['arg:Title=SampleTitle', 'arg:Note=SampleNote'] 
>>> dict(s[4:].split("=") for s in tokens) 
{'Note': 'SampleNote', 'Title': 'SampleTitle'} 
+0

簡單和直接的;謝謝。你能解釋第二個例子中字典前面的'**'做什麼嗎? – ABach 2014-09-04 14:59:04

+0

@ABach參見例如http://stackoverflow.com/q/36901/3001761 – jonrsharpe 2014-09-04 14:59:39

+0

太棒了。非常感謝。 – ABach 2014-09-04 15:03:11