Regex 如何删除重复字符,但保留其中两个?
如果超过2个字符 “你好 我的朋友!!!!!!!” 我需要减少到 “嗨 我的朋友!!” 请理解,在我的语言中有许多双字符的单词。 提前通知Regex 如何删除重复字符,但保留其中两个?,regex,perl,string,Regex,Perl,String,如果超过2个字符 “你好 我的朋友!!!!!!!” 我需要减少到 “嗨 我的朋友!!” 请理解,在我的语言中有许多双字符的单词。 提前通知 kplla如果基于PHP和regex的解决方案很好,您可以执行以下操作: $str = "Hiiiiiii My frieeend!!!!!!!"; $str=preg#u replace('#(.)\1+#','$1',$str) echo$str;//嗨,我的朋友 您也可以使用上面在Perl中使用的regex: $str = "Hiiiiiii My
kplla如果基于
PHP
和regex
的解决方案很好,您可以执行以下操作:
$str = "Hiiiiiii My frieeend!!!!!!!";
$str=preg#u replace('#(.)\1+#','$1',$str)
echo$str;//嗨,我的朋友
您也可以使用上面在Perl
中使用的regex
:
$str = "Hiiiiiii My frieeend!!!!!!!";
$str =~s/(.)\1{2,}/$1$1/g;
$str=“你好,我的朋友!!!!!!!”;
$str=~s/()\1{2,}/$1$1/g;
Perl/regex(如果不是英语,Perl让我在Unicode方面比PHP更走运):
下面是另一个使用Java的lookahead(只是为了好玩)的正则表达式解决方案:
System.out.println(
"Hiiiiii My Frieeeeend!!!!!!!".replaceAll("(.)(?=\\1\\1)", "")
); // prints "Hii My Frieend!!"
这取决于语言/平台。还是没关系?你会不会用正则表达式?如果不是,为什么不呢?请注意OP想要输出“Hii My frieend!!”——所以这还不太正确。我相信请求是留下双打,但不超过双打,对吗?是的,Devin。不超过两倍。我的语言是巴西语。(抱歉)我忘了告诉您,但我需要perl语言。(再次抱歉)这个想法是减少到不超过2。这样,我允许人们表达他们的“感受”,我不会破坏那些有双重魅力的词语。thnx@kplla当前位置虽然我很感激为减少此类写作所做的努力,但我必须告诉你,你将在这里与你的用户进行斗争。他们会找到一种方法来绕过你的过滤器(例如“Hii.ii.ii.ii.ii我的friee.eend!!”),他们会有很大的耐力来绕过这些过滤器。但是他们是孩子(现在),当他们看到一些阻碍他们想法的东西时,他们会停下来。将来我必须做得更好。。。谢谢。\1\1+相当于\1{2,}(第一次捕获的2个或更多)kixx:你说得对;那可能更干净。布莱恩:哇,我第一次把代码弄对了,你所要做的就是编辑我的大写字母!我感到骄傲
#!/usr/bin/perl
$str = "Hiiiiii My Frieeeeend!!!!!!!";
$str =~ s/(.)\1\1+/$1$1/g;
print $str;
System.out.println(
"Hiiiiii My Frieeeeend!!!!!!!".replaceAll("(.)(?=\\1\\1)", "")
); // prints "Hii My Frieend!!"