我正在寻找以最快的方式对某些字母集的每次出现执行正则表达式替换,并将所有结果放入列表或集合中。 例如,假设我想要替换每次出现的' hi'在字符串' hi foo hi bar hi hi'与'哟':
>>> replace_each('hi foo hi bar hi ho', 'hi', 'yo')
['yo foo hi bar hi ho', 'hi foo yo bar hi ho', 'hi foo hi bar yo ho']
我知道我可以这样做,只需迭代:
def replace_each(some_string, to_replace, replace_with):
solutions = []
window = len(some_string)
for idx in range(len(some_string)-window):
if some_string[idx:idx+window] == to_replace
solutions.append(some_string[:idx] + replace_with + some_string[idx+window:])
return solutions
但是,我必须这么做,所以我正在寻找更快的东西,可能使用正则表达式。
答案 0 :(得分:2)
import re
a = 'hi foo hi bar hi ho'
old_stuff = "hi"
new_stuff = "yo"
[a[:m.start()] + new_stuff + a[m.end():] for m in re.finditer(old_stuff, a)]
你可以在它周围创建一个函数来处理要查找的部分和要作为参数插入的部分。
答案 1 :(得分:1)
您可以使用re.sub
:
import re
re.sub('hi','yo','hi foo hi bar hi ho')
'hi foo hi bar hi ho'.replace( 'hi', 'yo')
替换所有hi
!
并且为了替换每次'hi',你可以这样做:
>>> string='hi foo hi bar hi ho'
>>> sub_list=['yo'.join(l[i:i+2]) for i in range(len(l))]
>>> [re.sub('hi'.join(t.split('yo')),t,string) for t in sub_list]
['yo foo hi bar hi ho', 'hi foo yo bar hi ho', 'hi foo hi bar yo ho', 'hi foo hi bar hi ho']