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

blz*_*blz 9 python regex

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

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

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

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

提前致谢!

DSM*_*DSM 48

另一种可能性是使用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']
Run Code Online (Sandbox Code Playgroud)

或(更短但信息量更少):

>>> field_names = [v[1] for v in string.Formatter().parse(s)]
>>> field_names
['foo', 'bar']
Run Code Online (Sandbox Code Playgroud)

  • 可以修改它来查找“%(name)s”占位符吗? (2认同)

Ash*_*ary 15

使用re.findall():

In [5]: import re

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

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

  • @blz是的,因为字符串是从左到右解析的。 (2认同)