如何删除字符串中重复的字符

Ed *_*d B 11 c# regex string

我有一个网站,允许用户评论照片.当然,用户会留下以下评论:

'OMGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG !!!!!!!!!!!!!!!'

要么

'你SUCCCCCCCCCCCCCCCKKKKKKKKKKKKKKKKKK'

你懂了.

基本上,我想通过删除至少大多数多余的重复字符来缩短这些评论.我确信有一种方法可以用Regex做到这一点......我无法理解它.

有任何想法吗?

Rya*_*sen 10

请记住,英语通常使用双字母,你可能不想盲目地消除它们.这是一个正则表达式,将摆脱双重之外的任何东西.

Regex r = new Regex("(.)(?<=\\1\\1\\1)", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled);

var x = r.Replace("YOU SUCCCCCCCCCCCCCCCCCKKKKKKKKKKKKKKKKKK", String.Empty);
// x = "YOU SUCCKK"

var y = r.Replace("OMGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG!!!!!!!!!!!!!!!", String.Empty);
// y = "OMGG!!"
Run Code Online (Sandbox Code Playgroud)


Dav*_*vid 8

您是否特别希望缩短代码中的字符串,还是仅仅通过验证失败并再次向用户显示验证错误?像"太多重复的人物"这样的东西.

如果后者是可接受的,@"(\w)\1{2}"则应匹配3或更多的字符(解释为"重复"两次或更多次).

编辑:正如@Piskvor所指出的,这将匹配正好 3个字符.它适用于匹配,但不适用于替换.他的版本,@"(\w)\1{2,}"可以更好地替换.但是,我想指出,我认为替换不是这里的最佳做法.最好只是让表单失败验证而不是尝试擦除正在提交的文本,因为可能会出现边缘情况,您将其他可读(即使不合理)文本转换为无意义.