用替换序列替换字符串中的占位符

时间:2019-09-17 21:07:26

标签: python

我有一个带占位符的位置字符串,用作“#”。另一个字符串,用于替换占位符。我想按顺序替换它们(例如格式说明符)。用Python做到的方式是什么?

location = '/tmp/#/dir1/#/some_dirx/dir/var/2/#/dir3'
replacements = 'xyz'

result = '/tmp/x/dir1/y/some_dirx/dir/var/2/z/dir3'

2 个答案:

答案 0 :(得分:1)

您应按如下所示使用字符串的replace方法:

for replacement in replacements:
    location = location.replace('#', replacement, 1)

使用第三个参数count只是一次替换该占位符,这一点很重要。否则,它将在您每次找到占位符时替换。

答案 1 :(得分:0)

如果您的位置字符串不包含格式说明符({}),则可以执行以下操作:

location = '/tmp/#/dir1/#/some_dirx/dir/var/2/#/dir3'
replacements='xyz'
print(location.replace("#", "{}").format(*replacements))

输出

/tmp/x/dir1/y/some_dirx/dir/var/2/z/dir3

作为替代方案,您可以使用re.sub中的repl可以是一个函数的事实:

import re
from itertools import count

location = '/tmp/#/dir1/#/some_dirx/dir/var/2/#/dir3'


def repl(match, replacements='xyz', index=count()):
    return replacements[next(index)]


print(re.sub('#', repl, location))

输出

/tmp/x/dir1/y/some_dirx/dir/var/2/z/dir3