2015-02-22 2 views
5

У меня есть строка - например, «Hello Worrld». Обратите внимание, что буква «r» повторяется дважды.Регулярное выражение Lookahead - идентификация повторяющихся последовательных букв

Я хочу идентифицировать буквы, которые происходят последовательно (два или более раз) и сохраняют только один из них. То есть, я хочу получить «Hello World» с одним «r».

У Golang, похоже, нет регулярных выражений lookahead.

Я попытался с помощью следующее регулярное выражение, чтобы идентифицировать буквы, которые повторяются последовательно -

r := regexp.Compile(`(.)\1`) 

Но он выбирает оба вхождения буквы - Я хотел бы только один из них должен быть выбран.

+0

Вы также хотите 'Hello' стать' Helo' , правильно? Th выражение должно быть '(.) \ 1 +', чтобы поймать 'wooorrrrrrld'. – dasblinkenlight

+0

О да. Верный. Ожидание состоит в том, чтобы идентифицировать все буквы, которые повторяются последовательно, и просто сохранить только один из них. – callmekatootie

+0

Я не знаком с библиотекой регулярных выражений в go, поэтому я понятия не имею, как это делается, но должен быть способ получить первую группу захвата, которая соответствует точке в круглых скобках. Полное выражение, которое во многих реализациях регулярных выражений соответствует нулевой группе, будет соответствовать всем одинаковым буквам, но первая группа захвата будет всего лишь первым символом. – dasblinkenlight

ответ

5

Вы можете использовать Pcre привязок, однако, если вы просто хотите, чтобы удалить DUP буквы, которые вы могли бы использовать strings.Map, например:

func stripDups(s string) string { 
    var last rune 
    return strings.Map(func(r rune) rune { 
     if r != last { 
      last = r 
      return r 
     } 
     return -1 
    }, s) 
} 

playground

+1

Красивый. Работает так, как ожидалось. Удаляет последовательные повторяющиеся буквы, сохраняя только один из них. – callmekatootie

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