我覺得這是一個難以置於單詞中的問題,因此是例子。然而,我基本上被給予arbitrary format strings,我需要(有效地)從數據庫中獲取適當的值,以便動態地構建相關的映射對象。如何從Python(傳統)格式字符串中提取字段名稱?
給定的格式字符串期待一個映射對象,例如:
>>> 'Hello, %(first-name)s!' % {'first-name': 'Dolph'}
'Hello, Dolph!'
我正在尋找的實現 'infer_field_names()' 下面:
>>> infer_field_names('Hello, %(first-name)s! You are #%(customer-number)d.')
['first-name', 'customer-number']
我知道我可以寫正則表達式(甚至試圖解析異常消息!),但我希望有一個現有的API調用,我可以使用,而不是..?
基礎上string Formatter docs,我想這會工作:
>>> import string
>>> format_string = 'Hello, %(first-name)s! You are #%(customer-number)d.'
>>> [x[1] for x in string.Formatter().parse(format_string)]
[None]
但是,這並沒有完全回到我所期待的(的field_name
S,A每個列表的文檔)。
請注意,您的方法可行,但只針對'{}'樣式的格式:''你好,{第一name}等!你是#{customer-number} d.'' – beerbajay 2012-02-25 20:30:23
@beerbajay:測試過^,你說得對...我想現在改變風格還不算太遲。爲什麼它適用於一種風格而不適用於另一種風格?有關於此的任何文檔? – Dolph 2012-02-25 20:34:53
由於'string.Formatter'稍後實施(在[PEP-3101](http://www.python.org/dev/peps/pep-3101/)之後)。 – beerbajay 2012-02-25 20:41:03