考虑一个printf
- 类函数的format
参数。类似的东西:
printf("Hello %s, your rating is %i%%", name, percentage);
我想使用正则表达式捕获所有类型说明符(在上面的例子中,%s
和%i
而不是 %%
)。
我开始使用天真的(%[^%])
模式,但错误地捕获%%f
之类的内容,而不是“转义”它。当然,%%%f
应该被解释为转义的“%”,然后是说明符。
我认为我需要一些更复杂的模式(也许是后视?),但无法解决它。有什么建议吗?
附注:我知道我的模式不处理长度说明符和其他格式标记,例如%2f
等,但这对我来说很好,因为我的目标主要是枚举和计算格式说明符。
答案 0 :(得分:1)
一方面,您不能在不小心捕捉WHERE Tour.TourId = 4
之类的内容的情况下跳过字符,因此您必须使用%%f
或在{0}开头使用match
(插入符号)你的正则表达式。另一方面,在这种情况下,您无法使用^
。由于没有findall
函数,最简单的方法是编写自己的循环:
matchall
当然,您可以更改附加到REG = re.compile('([^%]|%%)*(%[^%])') # a bunch of (non-% or %%), and then (% followed by non-%).
def find_type_specifiers(st):
retval = []
pos = 0 # where to start searching for next time
while True:
match = REG.match(st, pos)
if match is None:
return retval
retval.append(match.group(2))
pos = match.end()
的内容,例如你也对说明者的位置感兴趣。如果您只想要金额,可以换到计数器。