构建正则表达式以将重复的字符串替换为单个字

时间:2017-12-27 11:50:00

标签: c# regex

我正在过滤评论。我想像这样替换字符串:

llllolllllllllllooooooooooooouuuuuuuuuuuddddddddddddddllllollllllllllllloooooooooooooooooouuuuuuuuuuuuuuuuuuddddddddddddddllllollllllllllllloooooooooooooooooouuuuuuuuuuuuuuuuuuddddddddddddddllllollllllllllllloooooooooooouuuuuuuuuuuuuuuuudddddddddddddd

有两个字:lol loud

像这样的

字符串:

cuytwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

with:cuytw

这样的字符串:

hyyuyuyuyuyuyuyuyuyuyuyuyuyu

with:hyu

但不能修改像look,geek这样的字符串。 有没有办法用C#中的单个正则表达式来实现这个目的?

2 个答案:

答案 0 :(得分:1)

我不确定如何使用RegEx来解决这个问题,但是这里有一个替代方案可以说更容易理解。 *

假设您只想按顺序返回包含输入的不同字母的字符串,您可以使用GroupBy

private static string filterString(string input)
{
    var groups = input.GroupBy(c => c);
    var output = new string(groups.Select(g => g.Key).ToArray());
    return output;
}

通行证:

  • 返回loud
  • llllolllllllllllooooooooooooouuuuuuuuuuuddddddddddddddllllollllllllllllloooooooooooooooooouuuuuuuuuuuuuuuuuuddddddddddddddllllollllllllllllloooooooooooooooooouuuuuuuuuuuuuuuuuuddddddddddddddllllollllllllllllloooooooooooouuuuuuuuuuuuuuuuudddddddddddddd
  • 返回cuytw
  • cuytwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
  • 返回hyu
  • hyyuyuyuyuyuyuyuyuyuyuyuyuyu

故障:

  • 返回lok
  • look
  • 返回gek
  • geek

* 在第二次阅读时,您希望仅保留lookgeek之类的字词;这是部分答案。

答案 1 :(得分:1)

我想我可以断然回答这个问题。

由于您的输入和输出要求,这绝对不能用RegEx甚至标准代码完成,至少没有某种字典和算法可以尝试减少合法单词的排列检查中的双精度。

结果(充其量)会为您提供一系列可能非互斥的无意义单词和带有双打的合法单词的组合。

  

事实上,id远远超出你当前的要求而没有   对规则,输入和输出的额外特异性   一般来说是不可能的,只能按照你给出的案件的面值来看待