2016-06-01 2 views
2

Какое правильное регулярное выражение удаляет соседние повторяющиеся буквы, но не числа?Regex для удаления повторяющихся букв, но не цифр

Например:

p11ppppl --> p11pl 

Я имел следующее регулярное выражение:

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

, но это также заменяет повторяющиеся цифры.

+0

Возможно ['[^ \ w \ s] | (\ D) (? = \ 1)'] (https://regex101.com/r/lQ0aJ9/1)? –

+0

Это работает! Что такое | (\ D) и удаление (.) Do? (Я не слишком хорош с регулярным выражением) – 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 Как упоминалось в комментариях, мы также можем использовать:

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

с \1 в качестве замены строки, которая может быть лучшим подходом.

+2

Если вы пишете: '/ ([a-zA-Z]) \ 1 +/g' с' \ 1' в качестве замены, вы удалите все последовательные дубликаты только в одной замене. * (вместо одной замены дублированной буквой) *. –

+0

Когда я пробую это с Python, я получаю ''p11 \ x01ll''; hmm ... – Will

+1

используйте необработанную строку для замены строки 'r '\ 1'' или уберите обратную косую черту' '\\ 1''. –

Смежные вопросы