【问题标题】:Python is there a way to count the number of string inserts into a string?Python有没有办法计算插入字符串的字符串数量?
【发布时间】:2020-03-23 22:44:14
【问题描述】:

假设python中有一个字符串,比如

'f"{var_1} is the same as {var_2}"'

或类似的东西

"{} is the same as {}".format(var_1, var_2)

有没有办法计算字符串中存在的插入字符串的数量?

我正在尝试创建一个计算字符串中插入次数的函数。这是因为我有生成中间名的代码,它可以生成 2 个或 1 个中间名,为了保持代码一致,我宁愿计算字符串中存在的插入次数。

【问题讨论】:

标签: python string


【解决方案1】:

你可以使用正则表达式:

import re

s = 'f"{var_1} is the same as {var_2}"'

len(list(re.finditer(r'{.+?}', s)))

输出:

2

【讨论】:

  • 它比这更复杂,因为大括号是通过将它们加倍来转义的(这不会识别转义,如果它可以匹配左大括号,则将其视为占位符),并且占位符可以包含其他占位符(例如,内部占位符可用于确定格式宽度),这将被忽略(它将外部占位符的左大括号与内部的右大括号匹配)。考虑s = 'f"{var_1:{var_3}d} is the same as {var_2}"'s = 'f"{var_1} is {{the same}} as {var_2}"'
  • @kederrac:在我的第一个示例中,它使用了三个项目,并报告了两个(也许可以说是正确的,因为这三个中的一个用于格式化另一个)。第二个,它声称它使用了三个项目,但实际上只使用了两个(因为中间的一个使用了转义大括号,您将其检测为占位符;它不是一个)。在那里绝对行不通。
  • @ShadowRanger:是的,抱歉,这是对 kederrac 的评论。另请注意,f-strings 可以包含非常通用的表达式,包括 dict 文字,因此事情变得更加复杂。
【解决方案2】:

对于简单的情况,您可以只计算开括号的数量

nsubst = "{var_1} is the same as {var_2}".count("{")

但是对于复杂的情况,这不起作用并且没有简单的解决方案,因为您需要对格式语法进行完整的解析器或处理相当多的特殊情况(问题是例如转义大括号或字段中的嵌套字段替换格式规范)。此外,对于f-strings,您可以将相当大的有效 Python 表达式子集作为字段,包括文字嵌套字典,而且事情更加复杂。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 2020-11-30
    • 1970-01-01
    • 2021-03-20
    • 2021-01-29
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多