是否有内置函数或计数字符串中参数数量的好方法。例如:
"Here is my {}, and it has a {}"
Run Code Online (Sandbox Code Playgroud)
我希望能够确定该字符串中的参数数量为2,因此我可以将此值用于循环以从用户那里获取输入。
根据您要精确实现的目标,可能会有更优雅的解决方案。
为了回答您的问题,该Formatter课程可以为您提供帮助。
与其他提出的解决方案相反,此解决方案不依赖于使用正则表达式或字符串搜索进行自定义解析,因为它使用python自己的字符串解析器,并且可以保证是正确的。
这是一个示例代码,它返回字符串中参数的数量,它实例化一个新Formatter对象并parse在其上调用方法。根据文档,它将字符串拆分为一个元组列表,我们需要在第二个位置保留那些具有非None值的字符串:
parse(format_string)
遍历format_string并返回一个可迭代的元组(literal_text,field_name,format_spec,conversion)。vformat()使用它来将字符串分成文字文本或替换字段。
元组中的值在概念上表示文字文本的范围,后跟单个替换字段。如果没有文字文本(如果连续出现两个替换字段,则可能会发生),那么literal_text将为零长度的字符串。如果没有替换字段,则field_name,format_spec和conversion的值将为None。
import string
s = "Here is my {}, and it has a {}"
n_params = len( [e for e in list(string.Formatter().parse(s)) if e[1] is not None] )
print(n_params)
Run Code Online (Sandbox Code Playgroud)