如何删除重复的字符但留下其中两个?

时间:2010-04-27 03:28:31

标签: regex perl string

如果超过2个字符 “Hiiiiiii 我的朋友!!!!!!!“

我需要减少到 “斐伊川 我的朋友!!“

请注意,在我的语言中,有很多双字符的单词。 Thnx提前

kplla

3 个答案:

答案 0 :(得分:10)

Perl / regex(如果它不是英文版,Perl给我的运气比Unicode更好):

#!/usr/bin/perl

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

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

print $str;

答案 1 :(得分:2)

如果基于PHPregex的解决方案很好,您可以这样做:

$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 used above in Perl too:

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

答案 2 :(得分:1)

这是另一个使用lookahead(只是为了好玩)的正则表达式解决方案,在Java中:

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