2016-06-01 8 views
2

隣接する重複した文字を削除する適切な正規表現は何ですか?例えば重複する文字は削除しますが数字は削除しないでください

p11ppppl --> p11pl 

私は、次の正規表現持っていた:

/[^\w\s]|(.)(?=\1)/g 

をこれも重複した数字に置き換えられます。

+0

おそらく['[^ \ w \ s] |(\ D)(?= \ 1)'](https://regex101.com/r/lQ0aJ9/1)? –

+0

それは動作します! |何をしますか? (\ D)と削除(。)の削除? (私は正規表現ではあまり良くありません) – user4043891

+0

'\ D'は非数字文字と一致します。 –

答えて

3

私は(可視化here)このようにそれを行うだろう。ここでは

/([a-zA-Z])(?=\1)/g 

は、Pythonでの例です:

In [21]: re.sub(r'([a-zA-Z])(?=\1)', '', 'p11ppppl') 
Out[21]: 'p11pl' 

また、使用することができます

すべてのため
/([\D])(?=\1)/g 

除きます数字、または:

/([\w])(?=\1)/g 

すべての「単語文字」です。コメントで述べたよう@Casimir et Hippolyte

、我々はまた、使用することができます。より良い方法かもしれ置換文字列、など\1

/([a-zA-Z])\1+/g 

+2

'/([a-zA-Z])\ 1 +/g'を置換文字列として' \ 1'で書くと、1回の置換で連続するすべての複製を削除します。 *(重複した手紙による置き換えの代わりに)*。 –

+0

これをPythonで試してみると、 '' p11 \ x01ll'';うん... – Will

+1

置き換え文字列 'r '\ 1''に生の文字列を使用するか、バックスラッシュ' \\ 1''をエスケープします。 –

関連する問題