字符串列表,替换其他列表中的所有单词

时间:2018-11-09 16:57:21

标签: python regex list replace

Python新手在这里。

我有一个文档列表,另一个搜索条件列表。我现在想遍历每个文档,并用<placeholder>之类的东西替换所有出现的搜索词。但是,它只能匹配完整的单词,因此text.replace可能不起作用?

所以,像这样:

document_list =  ['I like apples', 'I like bananas', 'I like apples and bananas and pineapples', 'I like oranges, but not blood oranges.']
search_list = ['apples', 'bananas', 'blood oranges']

Out: ['I like <placeholder>', 'I like <placeholder>', 'I like <placeholder> and <placeholder> and pineapples', 'I like oranges, but not <placeholder>.']

现在,我有类似的东西

for document in document_list:
    for term in search_list:
        document = re.sub(r'\b{}\b'.format(term),'<placeholder>',document)

这似乎很有效,但是确实很慢(我的意思是 really )。如果我要在约1万个文档的完整数据集上运行它,并使用search_list可能包含约5000个字词,需要几天的时间才能完成。 有没有更好的方法来解决这个问题并使之更快?

非常感谢!

Edit1:也许值得一提的是search_list中的术语也可以由多个单词组成。相应地编辑了示例。

Edit2:感谢您指向另一个线程,之前没有找到那个线程。对于那个很抱歉。如下所述,我仍然很好奇听到其他非正则表达式解决方案只是为了了解它们。但是,实际问题已通过其他线程解决。 =)

1 个答案:

答案 0 :(得分:0)

这是一种可能性:

import re

document_list =  ['I like apples', 'I like bananas', 'I like apples and bananas and pineapples']
search_list = ['apples', 'bananas']

search_re = re.compile(r'\b(' + '|'.join(search_list) + r')\b')
replacement = r'<placeholder>'
document_replaced = [search_re.sub(replacement, doc) for doc in document_list]
print(*document_replaced, sep='\n)

输出:

I like <placeholder>
I like <placeholder>
I like <placeholder> and <placeholder> and pineapples