擅长:python、mysql、java
<p>您可以使用<a href="https://docs.python.org/2/library/string.html#string.Formatter.parse" rel="nofollow">^{<cd1>}</a>方法。它将字符串拆分为文本组件和字段:</p>
<pre><code>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)]
</code></pre>
<p>要检索names字段,只需迭代结果并收集第二个字段。在</p>
<p>请注意,这将包括位置参数(有编号和无编号)。在</p>
<p>请注意,这不包括嵌套的参数:</p>
^{pr2}$
<p>如果要获取<strong>所有</strong>命名字段(假设只使用命名字段),则必须解析元组中的第二个元素:</p>
<pre><code>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']
</code></pre>
<p>(这个解决方案允许任意深度的格式说明符,而只有一个级别就足够了)。在</p>