2010-04-27 6 views
3

Если их больше 2 символов "Hiiiiiii Мой фриз !!!!!!!"Как удалить повторяющиеся символы, но оставить два из них?

Мне нужно уменьшить до "Hii Мой фригий !!"

Пожалуйста, сообщите, что на моем языке есть много слов с двойными символами. Thnx заранее

kplla

+1

Это зависит от языка/платформы. Или это не имеет значения? –

+1

Вы будете использовать Regex или нет? Если нет, почему бы и нет? –

ответ

10

Perl/regex (и если это не английский, Perl дал мне лучшую удачу с Unicode t хань PHP):

#!/usr/bin/perl 

$str = "Hiiiiii My Frieeeeend!!!!!!!"; 

$str =~ s/(.)\1\1+/$1$1/g; 

print $str; 
+0

Отлично !!!! Спасибо Devin – kplla

+1

\ 1 \ 1+ эквивалентно \ 1 {2,} (2 или более первого захвата) – kixx

+0

kixx: вы правы; это может быть более чистым. Брайан: ничего себе, первый раз я получил код достаточно правильно, и все, что вам нужно было сделать, это изменить мою капитализацию! Я горжусь. ;-) –

2

Если решение на основе PHP и regex прекрасно вы можете сделать:

$str = "Hiiiiiii My frieeend!!!!!!!"; 

$str = preg_replace('#(.)\1+#','$1',$str);
echo $str; // prints Hi My friend!

$str = preg_replace('#(.)\1{2,}#','$1$1',$str); 
echo $str; // prints Hii My frieend!! 

You can make use of the regex используется выше в Perl тоже:

$str = "Hiiiiiii My frieeend!!!!!!!"; 
$str =~s/(.)\1{2,}/$1$1/g; 
+0

Обратите внимание, что OP хочет выход «Hii My frieend !!» - так что пока это не совсем правильно. –

+0

Я считаю, что просьба заключалась в том, чтобы оставить парные разряды, но не более чем в два раза, не так ли? –

+0

Спасибо, Марк и Девин. – codaddict

1

Вот еще регулярное выражение решение, которое использует предпросмотр (просто для удовольствия), в Java:

System.out.println(
    "Hiiiiii My Frieeeeend!!!!!!!".replaceAll("(.)(?=\\1\\1)", "") 
); // prints "Hii My Frieend!!"