2016-10-17 8 views
0

文字列中の2文字を検索/置換する非常に一般的な作業です。しかし、あなたはいくつかのステップで二重の文字を削除することができます存在するソリューションです。たとえば、文字列"skalallapennndraaa"があり、二重の文字を置き換えた後、出力"skalpendra"に入る必要があります。私は最高の速度で単語内の2文字の文字列のみを削除します。

re.sub(r'([a-z])\1+', r'\1', "skalallapennndraaa") 

で解決策を試してみましたが、これは("skalalapendra"をresult-)文字列内のすべての二重の文字を削除しないでください。 r''を2番目のパラメータとして使用すると、密接に関連する結果が"skalaapendr"になりますが、置換パラメータの正しい正規表現がまだ見つかりません。何か案は?

+0

何も置き換えない限り、正規表現を何度も実行する必要があります。 – Laurel

+0

置換パラメータに問題があります。なぜなら、二重文字を削除する必要がある場所では、r '\ 1'は1文字を残しますが、3文字または他の数字ではなく、両方の文字を削除する必要があります。 –

答えて

2

あなたは、この二重の交換使用することができます。

>>> s = 'skalallapennndraaa' 
>>> print re.sub(r'([a-z])\1', '', re.sub(r'([a-z])([a-z])\2\1', '', s)) 
skalpendra 

([a-z])([a-z])\2\1allaタイプを削除し、([a-z])\1が、残りの二重の文字を削除しますが。


アップデート: I以下のコメントに基づいて、ループベースのアプローチが最善であると認識。ここにあります:

>>> s = 'nballabnz' 
>>> while re.search(r'([a-z])\1', s): 
...  s = re.sub(r'([a-z])\1', '', s) 
... 
>>> print s 
z 
+0

*出力 "skalapendra" *に入るのに必要な二重の文字を置き換えた後。あなたは出力として 'skalpendra'を持っています。 –

+0

ちょうど私が必要と思われる。ありがとうございました! –

+1

説明が間違っていて、出力が正しいと思います。 –

関連する問題