计算文本中字符串数组中元素的总出现次数
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
获取所有 Matches
的 Count
的 Sum
,方法如下:
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)
我有一个
public static string[] words = {"word1","word2","word3"};
我想计算字符串中 word1 的出现次数 + word2 的出现次数 + word3 的出现次数。
我试过了
Regex.Matches(string, "word1").Count
这对于单个单词来说效果很好,但我不知道如何搜索所有字符串。 我不想使用 foreach,因为数组 "words" 最多可以包含 25 个字符串。 谢谢
您可以利用 System.Linq
获取所有 Matches
的 Count
的 Sum
,方法如下:
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)