正規表現がわかりません --> r'(\w*)(\w)\2(\w*)' および r'\1\2\3'わかりやすい方法。
では、行きましょう:
(\w*)
任意の種類の単語文字(文字、数字、アンダースコア – ロケール設定によって異なります。アクセント付きのフランス語文字を含めることができます) で、ゼロ回または複数回 (量指定子 *
を使用)。
次に、単語の 1 文字だけに一致させようとします(\w)
。次に、同じ文字をもう一度使用\2
します\w
。
その後、最初と同じように、0 または複数の単語文字が続きます。
その式が一致する場合は、検索パターンで括弧を使用してサブパターンをキャプチャしself.repl = r'\1\2\3'
て作成された一致に (再び後方参照を使用して) 置き換えます。
したがって、一致したすべての部分はそれ自体で置き換えられます – ただし、\2
グループ化括弧を持たない繰り返しの文字 match は例外です。
したがって、繰り返し char を少なくとも 3 回発生させたい場合は、式のその部分を次のように変更します(\w)(\2{2,})'
–{2,}
は、「前のパターンが少なくとも 2 回発生する場合にのみ一致する」という別の量指定子です。(最初の文字はすでに前の文字と一致しているため、少なくとも 2 回のみ。)(\w)
ただし、先頭と末尾を使用して機能させることはできませんでした(\w*)
が、これらはゼロワード文字にも一致するため、完全に破棄できると思います.
したがって、これはあなたが達成したいことをするはずです:
self.repeat_regexp = re.compile(r'(\w)(\1{2,})')
self.repl = r'\1'
(ここでは先頭のキャプチャ サブパターンを削除したため、現在の最初のキャプチャ サブパターンを参照する\2
に置き換えられました。)\1