假设我有一个字符串s
s = "?, ?, ?, test4, test5"
我知道有三个问号,我想用下面的数组
相应地替换每个问号replace_array = ['test1', 'test2', 'test3']
获取
output = "test1, test2, test3, test4, test5"
Python中是否有一个函数,如s.magic_replace_func(*replace_array)
,它将达到预期的目标?
谢谢!
答案 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()
会处理所有事情。