2016-09-23 29 views
0

を維持繰り返しマージの連続した言葉は、私はこの正規表現 - 最後のスペース

{{TAG}} {{TAG}}{{TAG}} {{TAG}} some other text. {{TAG}} {{TAG}}

のような文字列があると私は一つに{{TAG}}の複数の連続発生をマージしようとしています。だから、私はこの正規表現re.sub(r'(({{TAG}})\s*)+', "{{TAG}}", text)を使用して複数のオカレンスを削除しても問題ないです。

しかし、私は避けようとしている最後に1つ余分なスペースを取っています。私は

{{TAG}} some other text. {{TAG}}

を得るように、同様の質問hereを見つけましたが、それは私の問題を解決しませんでした。私の正規表現やPythonでの他の代替手段を改善するための提案はありますか?

答えて

3

一つの簡単な方法ではなく+のあなたは2

>>> re.sub(r'(?:{{TAG}}\s*)*{{TAG}}', r'{{TAG}}', string) 
'{{TAG}} some other text. {{TAG}}' 

として
  • (?:{{TAG}}\s*)*に正規表現を分割することができるということですが末尾にスペースがゼロ以上{{TAG}}にマッチします。

  • {{TAG}}最後の{{TAG}}にスペースを入れずに一致してください。


また、正の表情が先に

>>> re.sub(r'{{TAG}}\s*(?={{TAG}})', r'', string) 
'{{TAG}} some other text. {{TAG}}' 
  • {{TAG}}\s*スペースに続いて1 {{TAG}}をマッチ使ってこの問題を解決することができます。

  • (?={{TAG}}ポジティブルックアヘッド。上記の点で一致{{TAG}}かどうかをチェックしますが、1回以上{{TAG}}\s*に一致している別の{{TAG}}

1

が続いているが、あなたは\s*{{TAG}}のゼロ以上のインスタンスに続いて、一度{{TAG}}をマッチさせたいです。

re.sub('({{TAG}}(?:\s*{{TAG}})*)', '{{TAG}}', text) 
+0

これも機能するはずです。ありがとう。 – PratPor