有没有办法解析%-style字符串,如string.Formatter.parse

时间:2015-08-31 18:52:15

标签: python regex string parsing

我需要获取字符串中所有占位符的列表:

因此,"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

  

这个问题是如此本地化,对其他人来说永远不会有用   (除了那些同一班级的人)?如果是,请投票结束。

(来自Please clarify the policy on homework questions

2 个答案:

答案 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个令牌)。