Python正则表达式,如何从字符串中删除所有匹配项

时间:2016-05-12 16:29:25

标签: python regex

我有一个正则表达式列表。

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)这样的事情,以便从文本中删除所有匹配项,然后我可以返回已清理的文本。

有谁知道怎么做?我当前的代码只适用于每个模式的一个匹配,但是文本可能有超过一个出现的相同模式,我想消除所有匹配。

2 个答案:

答案 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组合正则表达式的示例。

对于非常复杂的正则表达式,我会遍历正则表达式列表。你可以从组合复杂的正则表达式中获得超时。