字符串格式的参数数量

Number of Arguments for String Formatting

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

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

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

效率不高 - 也不是很认真 :) ...

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

好吧,您可以为此使用格式化程序对象,因为它需要此函数来实现其自身的格式化目的。但是,您必须更改占位符。

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