Varagian Asked:2020-04-07 19:52:33 +0000 UTC2020-04-07 19:52:33 +0000 UTC 2020-04-07 19:52:33 +0000 UTC 计算字符串中的单词数C# 772 您需要计算文本中某些单词的数量,例如: 言语可以杀人,言语可以拯救。 您需要计算“Word”一词在一行(或文本)中出现的次数,并将结果写入变量。 c# 4 个回答 Voted Best Answer dmepty 2020-04-07T20:05:09Z2020-04-07T20:05:09Z 要将字符串拆分为单词,您可以使用该方法Split并在参数中传递用于除法的字符。 String s = "Словом можно убить, словом можно спасти."; String sSearch = "словом"; String[] words = s.Split(new char[] { ' ', ',' }); int counter = 0; foreach (var word in words) { if (sSearch == word.ToLower()) counter++; } Console.WriteLine(counter); Console.ReadKey(); EvgeniyZ 2020-04-07T20:30:09Z2020-04-07T20:30:09Z 我会这样做: 例如,我们有一行: string str = "Словом можно убить, словом можно спасти."; 我们需要先把它翻译成小写(ToLower()),然后再分解成单词。在我看来,它做得很好Regex.Split(因为它不需要为“打破”设置所有标志)。好吧,进一步,有了一个包含所有单词的数组,我们可以将它们分组并创建一个新集合,其中包含找到的单词数量和单词本身。基于此,我们的行将是这样的: var words = Regex.Split(str.ToLower(), @"\W+") .Where(x => !string.IsNullOrEmpty(x)) .GroupBy(g => g) .Select(s => new {Word = s.Key, Count = s.Count()}); 其实一切。我们现在可以大胆地展示我们需要的任何东西: var count = words.FirstOrDefault(x => x.Word == "словом")?.Count; 如果我们不需要知道其他单词,那么我们可以重写一下: var words = Regex.Split(str.ToLower(), @"\W+") .Where(x => x == "словом") .GroupBy(g => g) .Select(s => new {Word = s.Key, Count = s.Count()}) .FirstOrDefault()?.Count; *Select在这个例子中是一种方便,让我们知道单词和找到的匹配数。在输出中,我们得到int?,它将返回找到的单词数,如果没有找到这样的单词,则返回 null。 好吧,如果您只需要一些单词,那么您通常可以执行以下操作: int words = Regex.Split(str.ToLower(), @"\W+").Count(x => x == "словом"); Digital Core 2020-04-07T20:06:59Z2020-04-07T20:06:59Z 一切都非常简单,我们正在寻找带有正则表达式的子字符串的出现次数。 using System.Text.RegularExpressions; 方法: private int countWord(string source, string search) { string pattern = $"\\b{Regex.Escape(search)}\\b"; return new Regex(pattern, RegexOptions.IgnoreCase).Matches(source).Count; } 应用: int count = countWord("Словом можно убить, словом можно спасти.", "словом"); user177221 2020-04-07T22:55:57Z2020-04-07T22:55:57Z 根据单词构建表单的正则表达式\bслово\b并计算匹配数。\b是单词边界。运行单词Regex.Escape以转义特殊字符。 using System.Text.RegularExpressions; .... string source = "Словом можно убить, словом можно спасти."; string word = "словом"; int count = Regex.Matches( source, $"\\b{Regex.Escape(word)}\\b", RegexOptions.IgnoreCase) .Count; // 2
要将字符串拆分为单词,您可以使用该方法
Split并在参数中传递用于除法的字符。我会这样做:
例如,我们有一行:
我们需要先把它翻译成小写(
ToLower()),然后再分解成单词。在我看来,它做得很好Regex.Split(因为它不需要为“打破”设置所有标志)。好吧,进一步,有了一个包含所有单词的数组,我们可以将它们分组并创建一个新集合,其中包含找到的单词数量和单词本身。基于此,我们的行将是这样的:其实一切。我们现在可以大胆地展示我们需要的任何东西:
如果我们不需要知道其他单词,那么我们可以重写一下:
*
Select在这个例子中是一种方便,让我们知道单词和找到的匹配数。在输出中,我们得到int?,它将返回找到的单词数,如果没有找到这样的单词,则返回 null。好吧,如果您只需要一些单词,那么您通常可以执行以下操作:
一切都非常简单,我们正在寻找带有正则表达式的子字符串的出现次数。
方法:
应用:
根据单词构建表单的正则表达式
\bслово\b并计算匹配数。\b是单词边界。运行单词Regex.Escape以转义特殊字符。