使用字符串数组替换字符串

时间:2014-02-20 16:18:56

标签: python string list replace

假设我有一个字符串s

s = "?, ?, ?, test4, test5"

我知道有三个问号,我想用下面的数组

相应地替换每个问号
replace_array = ['test1', 'test2', 'test3']

获取

output = "test1, test2, test3, test4, test5"

Python中是否有一个函数,如s.magic_replace_func(*replace_array),它将达到预期的目标?

谢谢!

4 个答案:

答案 0 :(得分:5)

使用str.replace并将'?'替换为'{}',然后您只需使用str.format方法:

>>> s = "?, ?, ?, test4, test5"
>>> replace_array = ['test1', 'test2', 'test3']
>>> s.replace('?', '{}', len(replace_array)).format(*replace_array)
'test1, test2, test3, test4, test5'

答案 1 :(得分:4)

使用str.replace()限制,并循环:

for word in replace_array:
    s = s.replace('?', word, 1)

演示:

>>> s = "?, ?, ?, test4, test5"
>>> replace_array = ['test1', 'test2', 'test3']
>>> for word in replace_array:
...     s = s.replace('?', word, 1)
... 
>>> s
'test1, test2, test3, test4, test5'

如果您的输入字符串不包含任何花括号,您也可以用{}占位符替换卷曲问号并使用str.format()

s = s.replace('?', '{}').format(*replace_array)

演示:

>>> s = "?, ?, ?, test4, test5"
>>> s.replace('?', '{}').format(*replace_array)
'test1, test2, test3, test4, test5'

如果您的真实输入文字已经包含{}个字符,那么您需要先删除它们:

s = s.replace('{', '{{').replace('}', '}}').replace('?', '{}').format(*replace_array)

演示:

>>> s = "{?, ?, ?, test4, test5}"
>>> s.replace('{', '{{').replace('}', '}}').replace('?', '{}').format(*replace_array)
'{test1, test2, test3, test4, test5}'

答案 2 :(得分:2)

使用函数方法的正则表达式 - 仅扫描字符串一次,在调整替换模式方面更灵活,不可能与现有格式化操作冲突,并且可以更改为提供默认值(如果不够)可以替换......:

import re

s = "?, ?, ?, test4, test5"
replace_array = ['test1', 'test2', 'test3']
res = re.sub('\?', lambda m, rep=iter(replace_array): next(rep), s)
#test1, test2, test3, test4, test5

答案 3 :(得分:1)

试试这个:

s.replace('?', '{}').format(*replace_array)
=> 'test1, test2, test3, test4, test5'

更好的是,如果您使用?占位符代替{}符号,则可以直接拨打format(),而无需先调用replace()。在那之后,format()会处理所有事情。