在python字符串格式中用相同的值替换多个参数

时间:2018-01-03 05:56:52

标签: python string

我有一个巨大的字符串,如下所示:

100hello100string100formatting ...

此外,100是动态值。在原始字符串中,有{60}次出现100。如何格式化字符串以便我只能传递一次参数?

我目前正在做以下事情:

"%dhello%dstring%dformatting%d ..." % (100, 100, 100, ...)

有没有办法只传递一次100值,以便它对所有其他参数采用相同的值?

5 个答案:

答案 0 :(得分:2)

尝试字符串formattingsee also PEP):

"{0}hello{0}string{0}formatting".format(100)
# '100hello100string100formatting'

答案 1 :(得分:1)

我建议使用str.join

如果您有60次出现100,这也意味着您的字符串中有60个单词。很可能你从某个地方获得了这些词,例如从文件,数据库或用户输入。

假设您可以将所有这些单词放入列表中,为什么不加入列表中的元素,而不是输入所有单词的麻烦?

>>> words = ['hello', 'string', 'formatting']
>>> '100'.join(words)
hello100string100formatting

为此,您的动态值100必须是字符串,因此如果它存储为数字,则需要先将其转换为:

>>> num = 100
>>> str(num).join(words)

答案 2 :(得分:0)

"%dhello%dstring%dformatting" % (*[100]*3,)

基本上,您创建一个包含所需值的临时列表([100]),将其乘以您需要的值(*3)并将其与*前置,以便你解压缩列表

答案 3 :(得分:0)

如果您使用的是python版本3.X

,这可能对您有用

“{100}想要吃{100}”。格式(100 =“你期望的结果”)

答案 4 :(得分:0)

只是一个建议

首先创建一个模板字符串,在其中放置一些特殊字符,其中应包含动态值。
示例:## hello ## string ## formatting

然后创建一个函数,使用regex替换给定参数的字符串中的##。

<强>代码

def getString(value, string) :
    newString = string.replace('##', str(value))
    return newString

template = '##hello##string##formatting'
replaceHundred = getString(100, template)
replaceTwoHundred = getString(200, template)
.
.
replacedString = getString( anyValue , template)