字符串格式的参数数量

时间:2016-02-13 12:10:23

标签: python string string-formatting

我想知道给定格式字符串所需的参数数量。例如,"%s is my name, and %s is my hair color"需要两个参数。我可以找到%在字符串中显示的次数,但如果我真的想在我的字符串中使用%并且%%表示这一点。它似乎也不优雅。还有更好的方法吗?

3 个答案:

答案 0 :(得分:2)

我能想到的最简单的方法是:

my_string = "%s is my name, and %s is my hair color"
my_string.count('%') - 2 * my_string.count('%%')

答案 1 :(得分:0)

好吧,你可以使用formatter对象,因为这需要这个函数用于自己的格式化目的。但是你必须改变占位符。

import string

fmt = string.Formatter()
my_string = "Hello, {0:s} is my name and {1:s} is my hair color. I have 30% blue eyes"
parts = fmt.parse(my_string)
print list(parts)

这给出了:

[('Hello, ', '0', 's', None), (' is my name and ', '1', 's', None), (' is my hair color. I have 30% blue eyes', None, None, None)]

现在需要过滤掉正确的部分,即每个元组中的第3个项目都不是None。

所有东西都可以改成像这样的单线:

len([p for p in fmt.parse(my_string) if p[2] is not None]) # == 2

答案 2 :(得分:-1)

效率不高 - 并不完全严重:) ...

for n in xrange(10, -1, -1):
    try:
        s % (('',)*n)
    except TypeError:
        continue
    print n
    break