2016-05-12 8 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)ような何かをしたいと、私は清めテキストを返すことができます。

誰でもこれを行う方法を知っていますか?私の現在のコードは、各パターンの1つのマッチでのみ動作しますが、テキストはより多く、同じパターンの出現があります。私はすべてのマッチを排除したいと思います。

+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で結ぶことができます。スタックオーバーフローでORを使って正規表現を組み合わせる例があります。

本当に複雑な正規表現については、私は正規表現のリストをループします。複雑な正規表現を組み合わせてタイムアウトを得ることができます。

関連する問題