【发布时间】:2012-02-25 20:19:00
【问题描述】:
我发现这是一个难以用语言表达的问题,因此提供了示例。但是,我基本上得到了arbitrary format strings,我需要(有效地)从数据库中获取适当的值,以便动态构建相关的映射对象。
给定一个期望映射对象的格式字符串,例如:
>>> '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_names 的列表,根据文档)。
【问题讨论】:
-
请注意,您的方法有效,但仅适用于
{}-style 格式:'Hello, {first-name}s! You are #{customer-number}d.' -
@beerbajay:测试过 ^,你是对的......我想现在改变风格还为时不晚。为什么它适用于一种风格而不适用于另一种风格?有任何相关文档吗?
-
因为
string.Formatter是后来实现的(在PEP-3101之后)。
标签: python regex string string-formatting