【问题标题】:Python regex, how to delete all matches from a stringPython正则表达式,如何从字符串中删除所有匹配项
【发布时间】:2016-05-12 16:29: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) 这样的事情,以便从文本中删除所有匹配项,然后我可以返回 cleansed 文本。

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

【问题讨论】:

  • 你需要那些火柴吗?也许首先 re.sub 文本更容易?此外,模式的顺序很重要。您应该事先注意这一点。

标签: python regex


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    对于简单的正则表达式,您可以使用“|”将表达式组合在一起。有在堆栈溢出时使用 OR 组合正则表达式的示例。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-28
      • 2020-11-29
      • 2011-11-28
      • 1970-01-01
      • 1970-01-01
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多