计算文本中字符串数组中元素的总出现次数

Count total occurences of elements from string array in a text

我有一个

public static string[] words = {"word1","word2","word3"};

我想计算字符串中 word1 的出现次数 + word2 的出现次数 + word3 的出现次数。

我试过了

Regex.Matches(string, "word1").Count 

这对于单个单词来说效果很好,但我不知道如何搜索所有字符串。 我不想使用 foreach,因为数组 "words" 最多可以包含 25 个字符串。 谢谢

您可以利用 System.Linq 获取所有 MatchesCountSum,方法如下:

private static void Main()
{
    var words = new[] {"dog", "coyote", "fox"};

    var input = "The quick brown fox jumps over the lazy dog";

    var wordCount = words.Sum(word => Regex.Matches(input, word).Count);

    // wordCount = 2
}

你最好的,也许是唯一的选择是循环遍历单词列表。

我的偏好是这样的:

int intTotalWordCount=0;

for (int intJ=0;intJ<words.Length;intJ++)
{
    intTotalWordCount+=Regex.Matches(string, words[intJ]).Count;
}

Console.WriteLine (@"Final word count = {0}",intTotalWordCount;

当然,您也可以将上述块包装在一个方法中,该方法将 intTotalWordCount 作为其 return 值。

这是一种更通用的方法。
Regex 让您可以更好地控制它找到的单词的上下文。
而且,我猜它要快得多,因为它一次性完成所有工作
没有很多原语操作。

string[] words = { "word1", "word2", "word3" };
Regex rx = new Regex(   @"(?is)(?:.*?\b(" + string.Join("|", words) +   @")\b)+");

string strin = "There are some word3 and more words and word1 and more word3, again word1";

Match m = rx.Match( strin );
if ( m.Success )
    Console.WriteLine("Found {0} words", m.Groups[1].Captures.Count);

输出

Found 4 words


上面的正则表达式使用了单词 boundary \b.
替代边界选择:空白 (?<!\S) (?!\S)