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

标签 c# arrays regex count find-occurrences

我有一个

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

我想计算字符串中单词 1 的出现次数 + 单词 2 的出现次数 + 单词 3 的出现次数。

我试过了

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

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

最佳答案

这是一种更通用的方法。
正则表达式让您可以更好地控制它找到的单词的上下文。
而且,我猜它要快得多,因为它一次性完成了所有事情
无需大量原语操作。

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


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

关于c# - 计算文本中字符串数组中元素的总出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56299381/

相关文章:

regex - 将编译的正则表达式转换为字符串

c# - 单元测试 Windows 8 应用商店应用程序用户界面(Xaml 控件)

c++ - 在 C++ 中增加数组大小

javascript - 数组声明和赋值 (JavaScript)

java - 基于正则表达式的分割模式

MYSQL: REGEXP 单引号匹配

c# - 具有异步 UDP 操作的 .NET IOCP 线程池开销

c# - 如何判断用户何时在您的控制范围之外单击?

c# - C#中C语言格式说明符的使用方法

sql - 在 PostgreSQL 中将一行转换为数组