如何使用正则表达式在python字符串中找到str.format的所有占位符?

时间:2012-12-27 21:45:53

标签: python regex

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

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

因此,"{foo}{bar}"应该产生['foo', 'bar']

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

提前致谢!

2 个答案:

答案 0 :(得分:44)

另一种可能性是使用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']

答案 1 :(得分:14)

使用re.findall()

In [5]: import re

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

In [9]: re.findall(r"{(\w+)}", strs)
Out[9]: ['foo', 'bar']