C# 查找字符串中多次使用的短语

C# 查找字符串中多次使用的短语,c#,C#,更新 对不起,我几乎没有英语 我想数一数字符串中的短语 我的绳子在下面 Lorem ipsumdolorsit amet,是一位杰出的献身者。纳拉 维尼纳提斯,lorem ipsumaugue vel Pellenteskue坐在阿梅特,lorem ipsum多洛·埃吉斯塔斯湖, 这是我的错 我想在下面 3x同侧眼线 2个坐在阿梅特 我尝试了这个链接中的函数 但我的结果如下 重复=10080x(是否正在计算空格?) 重复=99x photoshop 重复=52x德斯莱里 重复=44x p

更新

对不起,我几乎没有英语

我想数一数字符串中的短语

我的绳子在下面

Lorem ipsumdolorsit amet,是一位杰出的献身者。纳拉 维尼纳提斯,lorem ipsumaugue vel Pellenteskue坐在阿梅特,lorem ipsum多洛·埃吉斯塔斯湖, 这是我的错

我想在下面

  • 3x同侧眼线

  • 2个坐在阿梅特

我尝试了这个链接中的函数

但我的结果如下

  • 重复=10080x(是否正在计算空格?)
  • 重复=99x photoshop
  • 重复=52x德斯莱里
  • 重复=44x photoshop dersleri
  • 重复=36倍photoshop文件
但我想在下面

  • 重复=44x photoshop dersleri
  • 重复=36倍photoshop文件
  • 重复=和其他
我使用了这个函数

var splitBySpace = text2.Split(' ');

var doubleWords = splitBySpace
        .Select((x, i) => new { Value = x, Index = i })
        .Where(x => x.Index != splitBySpace.Length - 1)
        .Select(x => x.Value + " " + splitBySpace.ElementAt(x.Index + 1));

var duplicates = doubleWords
    .GroupBy(x => x)
    .Where(x => x.Count() > 1)
    .Select(x => new { x.Key, Count = x.Count() })
    .OrderByDescending(w => w.Count);

foreach (var word in duplicates)
    ensikkelimeler.Add(string.Format("{0}x {1}", word.Count, word.Key));
我对您的代码(似乎来自)进行了一些调整(我在注释中描述了更改):

以下是示例文本的结果:

3x lorem ipsum 
3x ipsum dolor 
2x sit amet 
我还尝试了从您链接的问题中选择的答案。在我添加了对
ToLowerInvariant()
的调用后,它返回了两个单词短语的相同结果,但还包括一个三个单词短语:

2x lorem ipsum dolor 
3x lorem ipsum 
3x ipsum dolor 
2x sit amet 
CountPhraseInText函数:

int CountPhraseInText(string input, string phrase)
{
     return new Regex(phrase, RegexOptions.IgnoreCase).Matches(input).Count;
}

它会重复“photoshop”,尽管在原始字符串中甚至不存在???photoshop单词在我的字符串中使用了99次。但我一句话也不想说。我需要两个字。不是“photoshop”,而是“photoshop dersleri”。对不起,我刚刚意识到这是我偶然投下的否决票,现在我无法逆转,因为已经有一段时间了。你能编辑一下答案吗?这样我就可以把我的投票改为赞成票而不是反对票了?
var text = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
             Nulla venenatis, lorem ipsum augue vel pellentesque sit amet, 
             lorem ipsum dolor egestas lacus, et ipsum dolor nulla.";

var phrases = new string[] { "sit amet", "lorem ipsum" };

var q = phrases.Select(p => new { phrase = p, Count =  CountPhraseInText(text, p) })
               .OrderBy(x => x.Count);
int CountPhraseInText(string input, string phrase)
{
     return new Regex(phrase, RegexOptions.IgnoreCase).Matches(input).Count;
}