我需要获取字符串中所有占位符的列表:
因此,"There're %(num_items)d items in the %(container)s"
应该产生(('num_items', 'd'), ('container', 's'))
。
我尝试了什么:
1)我试着查看源代码,发现
PyObject *
PyString_Format(PyObject *format, PyObject *args)
函数在C级上进行%插值。
2)我也尝试搜索pypi并找到一个parse
lib与string.Formatter.parse
做同样的事情,它正在解析{} -style字符串,这不是我需要的。
警告:快速正则表达式不太可能涵盖%替换的所有语法,这正是我所需要的。
类似的问题:How can I find all placeholders for str.format in a python string using a regex?
更新
似乎可以通过相当复杂的正则表达式来解决,因此它将完成一项不错的家庭作业任务。
我会在两天内接受this作为答案,我预计不会有任何新问题的答案。
UPDATE2
这个问题是如此本地化,对其他人来说永远不会有用 (除了那些同一班级的人)?如果是,请投票结束。
答案 0 :(得分:0)
import re
s = "There're %(num_items)d items in the %(container)s"
print re.findall(r'%\((.*?)\)', s)
答案 1 :(得分:0)
我最终得到了这个正则表达式:
re.findall(r'%\(([^)]+)\)[0-9]*(?:\.[0-9]*)?([diouxXeEfFgGcrs%])', a)
作为问题的合理近似值(匹配7中的5个令牌)。