从字符串中删除列表中定义的任何模式(单词或正则表达式)



我有一个列表

forbidden_patterns=['Word1','Word2','Word3','d{4}']

和一个字符串:

string1="This is Word1 a list thatWord2 I'd like to 2016 be readableWord3"

string1 删除forbidden_patterns中定义的所有模式和单词的方法是什么,以便它以 :

clean_string="This is a list that I'd like to be readable"

\d{4} 是删除年份模式,在本例中为 2016

非常欢迎列表理解

你在这里:

import re
forbidden_patterns = ['Word1', 'Word2', 'Word3', 'd{4}']
string = "This is Word1 a list thatWord2 I'd like to 2016 be readableWord3"
for pattern in forbidden_patterns:
    string = ''.join(re.split(pattern, string))
print(string)

本质上,此代码遍历 forbidden_patterns 中的每个模式,使用该特定模式作为分隔符拆分string(从字符串中删除分隔符,在本例中为模式(,并将其重新连接在一起为下一个模式的字符串。

编辑

要删除多余的空格,请将以下行作为 for 循环中的第一行:

string = ''.join(re.split(r'b{} '.format(pattern), string))

此行检查模式是否是整个单词,如果是,则删除该单词和其中一个空格。确保此行高于 string = ''.join(re.split(pattern, string)) ,它比此行"不那么具体"。

import re
new_string = string1
for word in forbidden_words:
    new_string = re.sub(word, '', new_string)

您的new_string将是您想要的。不过,它有点长,删除了一些单词,留下 2 个空格作为This is a list that I'd like to be readable

最新更新