我有一个正则表达式列表。
rgx_list = ['pattern_1', 'pattern_2', 'pattern_3']
我正在使用一个函数遍历列表,编译正则表达式,并应用findall
来获取匹配的术语然后我想要一种从文本中删除所述术语的方法
def clean_text(rgx_list, text):
matches = []
for r in rgx_list:
rgx = re.compile(r)
found_matches = re.findall(rgx, text)
matches.append(found_matches)
我想做text.delete(matches)
这样的事情,以便从文本中删除所有匹配项,然后我可以返回已清理的文本。
有谁知道怎么做?我当前的代码只适用于每个模式的一个匹配,但是文本可能有超过一个出现的相同模式,我想消除所有匹配。
答案 0 :(得分:9)
使用sub
将匹配的模式替换为空字符串。无需先单独找到匹配项。
def clean_text(rgx_list, text):
new_text = text
for rgx_match in rgx_list:
new_text = re.sub(rgx_match, '', new_text)
return new_text
答案 1 :(得分:0)
对于简单的正则表达式,您可以使用" |"将表达式组合在一起。有一些在堆栈溢出时使用OR组合正则表达式的示例。
对于非常复杂的正则表达式,我会遍历正则表达式列表。你可以从组合复杂的正则表达式中获得超时。