Dol*_*lph 3 python regex string string-formatting
我发现这是一个难以理解的问题,因此就是例子.不过,我基本上被赋予任意格式的字符串,我需要去(有效)从数据库中获取相应的值,以动态地建立一个相关的映射对象.
给定期望映射对象的格式字符串,例如:
>>> 'Hello, %(first-name)s!' % {'first-name': 'Dolph'}
'Hello, Dolph!'
Run Code Online (Sandbox Code Playgroud)
我正在寻找下面的'infer_field_names()'的实现:
>>> infer_field_names('Hello, %(first-name)s! You are #%(customer-number)d.')
['first-name', 'customer-number']
Run Code Online (Sandbox Code Playgroud)
我知道我可以写正则表达式(或甚至尝试解析异常消息!),但我希望有一个现有的API调用,我可以改用..?
基于字符串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]
Run Code Online (Sandbox Code Playgroud)
但这并没有完全回归我所期望的(field_name根据文档的s 列表).
当使用%运算符格式化字符串时,右操作数不必是字典 - 它只需要是一些对象,将所需的字段名称映射到应该被替换的值.因此,您需要做的就是编写一个带有重新定义的类,该类__getitem__()从数据库中检索值.
这是一个毫无意义的例子:
class Mapper(object):
def __getitem__(self, item):
return item
print 'Hello, %(first-name)s!' % Mapper()
Run Code Online (Sandbox Code Playgroud)
版画
Hello, first-name!
Run Code Online (Sandbox Code Playgroud)