正規表現を使ってテキストブロックからいくつかのものを削除しようとしています。私はすべてのパターンを準備していますが、重複する2つ(またはそれ以上)を取り除くことができないようです。例えば複数の正規表現の置換を組み合わせる
:
import re
r1 = r'I am'
r2 = r'am foo'
text = 'I am foo'
re.sub(r1, '', text) # Returns ' foo'
re.sub(r2, '', text) # Returns 'I '
どのように私は同時に出現の両方を交換し、空の文字列で終わるのですか?
は私が Ned Batchelder's answerを少し変更したバージョンを使用して終了:
def clean(self, text):
mask = bytearray(len(text))
for pattern in patterns:
for match in re.finditer(pattern, text):
r = range(match.start(), match.end())
mask[r] = 'x' * len(r)
return ''.join(character for character, bit in zip(text, mask) if not bit)
私は、マッチオブジェクトの 'start'と' end'属性について考えたことはありませんでした。私はこれがうまくいくと確信していますので、ありがとう! – Blender
すばらしい答え!これらはメソッドであり属性ではないので、 'start'と' end'に '()'を追加しました。 – georg
@ thg435:ありがとう、私はそれをテストしたはずです! :) –