11

我正在创建一个使用用户指定格式重命名文件的类。这种格式将是一个简单的字符串,str.format将调用其方法来填充空白。

事实证明,我的过程需要提取大括号中包含的变量名。例如,一个字符串可能包含{user},它应该产生user。当然,一个字符串中会有几组大括号,我需要按照它们出现的顺序获取每组的内容,并将它们输出到一个列表中。

因此,"{foo}{bar}"应该屈服['foo', 'bar']

我怀疑最简单的方法是使用re.split,但我对正则表达式一无所知。有人可以帮我吗?

提前致谢!

4

2 回答 2

60

另一种可能性是使用 Python 的实际Formatter本身为您提取字段名称:

>>> import string
>>> s = "{foo} spam eggs {bar}"
>>> string.Formatter().parse(s)
<formatteriterator object at 0x101d17b98>
>>> list(string.Formatter().parse(s))
[('', 'foo', '', None), (' spam eggs ', 'bar', '', None)]
>>> field_names = [name for text, name, spec, conv in string.Formatter().parse(s)]
>>> field_names
['foo', 'bar']

或(较短但信息较少):

>>> field_names = [v[1] for v in string.Formatter().parse(s)]
>>> field_names
['foo', 'bar']
于 2012-12-27T21:58:30.580 回答
18

使用re.findall()

In [5]: import re

In [8]: strs = "{foo} spam eggs {bar}"

In [9]: re.findall(r"{(\w+)}", strs)
Out[9]: ['foo', 'bar']
于 2012-12-27T21:48:25.170 回答