2016-05-12 91 views
2

我有一個正則表達式模式列表。Python的正則表達式,如何從字符串中刪除所有匹配

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

你需要那些比賽嗎?第一件事情可能會比較簡單嗎?而且,模式的順序也很重要。你應該事先看到。 –

回答

3

使用sub可以用空字符串替換匹配的模式。無需首先分別找到匹配。

def clean_text(rgx_list, text): 
    new_text = text 
    for r in rgx_list: 
     new_text = re.sub(rgx, '', new_text) 
    return new_text 
+0

發揮魅力 - 感謝您的提供! – eggman

0

對於簡單的正則表達式,你可以使用「|」或者表達式。有堆棧溢出使用OR組合正則表達式的例子。

對於非常複雜的正則表達式,我將遍歷正則表達式列表。您可以從複合正則表達式中獲取超時。

相關問題