用到目前为止已出现的次数替换每次出现的字符串

时间:2018-08-31 23:06:58

标签: python regex string replace

我有一个带占位符的字符串,我想为每个占位符附加一个索引。

例如

'This @placeholder is @placeholder'

应该成为

'This @param0 is @param1'

假设我有一个带有2个值的参数列表(与@placeholder出现的时间匹配)。

一个可选的解决方案是。

result = ''
parts = my_text.split('@placeholder')
for i in range(0, len(params)):
  result += '{}@param{}'.format(parts[i], i)
return result

另一种选择是继续用当前索引替换占位符,但这意味着扫描字符串len(params)次。

for i in range(0, len(params)):
  my_text = my_text.replace('@placeholder', '@param{}'.format(i), 1)

在python中有更好的解决方案吗?

2 个答案:

答案 0 :(得分:3)

带有回调和计数器的简单re.sub解决方案怎么样?

>>> import itertools
>>> c = itertools.count()
>>> text = 'This @placeholder is @placeholder'
>>> re.sub(r'\b@placeholder\b', lambda x: f'@param{next(c)}', text)
'This @param0 is @param1'

答案 1 :(得分:1)

使用@ Ajax1234的答案,我可以将占位符替换为{},并使用数组格式化。

my_text = 'This param{} is param{}'
print(my_text.format(i for i in range(len(params))]))