from string import Formatter
fieldnames = [fname for _, fname, _, _ in Formatter().parse(yourstring) if fname]
演示:>>> from string import Formatter
>>> yourstring = "path/to/{self.category}/{self.name}"
>>> [fname for _, fname, _, _ in Formatter().parse(yourstring) if fname]
['self.category', 'self.name']
>>> yourstring = "non-keyword {keyword1} { {escaped brackets}} {} {keyword2}"
>>> [fname for _, fname, _, _ in Formatter().parse(yourstring) if fname]
['keyword1', 'keyword2']
您可以进一步解析这些字段名;为此,您可以使用str._formatter_field_name_split()方法(Python 2)/_string.formatter_field_name_split()函数(Python 3)(此内部实现细节不会公开;^{}在内部使用它)。此函数返回名称的第一部分,即在传递给str.format()的参数中查找的部分,以及字段其余部分的生成器。
生成器生成(is_attribute, name)元组;is_attribu