In [1]: import string
In [2]: formatter = string.Formatter()
In [3]: text = 'Here is some text with {replacement} fields {}'
In [4]: list(formatter.parse(text))
Out[4]:
[('Here is some text with ', 'replacement', '', None),
(' fields ', '', '', None)]
要检索names字段,只需迭代结果并收集第二个字段。在
请注意,这将包括位置参数(有编号和无编号)。在
请注意,这不包括嵌套的参数:
^{pr2}$
如果要获取所有命名字段(假设只使用命名字段),则必须解析元组中的第二个元素:
In [4]: def get_named_fields(text):
...: formatter = string.Formatter()
...: elems = formatter.parse(text)
...: for _, field, spec, _ in elems:
...: if field:
...: yield field
...: if spec:
...: yield from get_named_fields(spec)
...:
In [5]: list(get_named_fields('{hello:{world}}'))
Out[5]: ['hello', 'world']
为什么要改头换面?
string.Formatter
具有parse()功能。在您可以使用^{} 方法。它将字符串拆分为文本组件和字段:
要检索names字段,只需迭代结果并收集第二个字段。在
请注意,这将包括位置参数(有编号和无编号)。在
请注意,这不包括嵌套的参数:
^{pr2}$如果要获取所有命名字段(假设只使用命名字段),则必须解析元组中的第二个元素:
(这个解决方案允许任意深度的格式说明符,而只有一个级别就足够了)。在
相关问题 更多 >
编程相关推荐