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

24

我有一组正则表达式模式。

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
你真的需要这些匹配吗?也许直接使用 re.sub 处理文本会更容易一些?此外,模式的顺序很重要,你应该提前考虑好。 - Wiktor Stribiżew
2个回答

36

使用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

0

对于简单的正则表达式,您可以使用“|”将表达式进行逻辑或操作。在stack overflow上有结合使用OR的正则表达式的示例。

对于非常复杂的正则表达式,我建议循环遍历正则表达式列表。因为组合使用复杂的正则表达式可能会导致超时。


你能分享一些例子或链接吗? - Hammad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接