查找文本中“ x”的确切单词的实例数

use*_*302 2 c# regex string

我正在c#中查找确切的单词“ x”的实例数。例如:

List<string> words = new List<string> {"Mode", "Model", "Model:"};
Text= "This is Model: x Type: y aa: e";
Run Code Online (Sandbox Code Playgroud)

我用过正则表达式:

for(i=0; i<words.count; i++)
{
    word= list[i]
    int count= Regex.Matches(Text,word) 
}
Run Code Online (Sandbox Code Playgroud)

但是它不起作用。以上代码的结果给了count=1每一个ModeModelModel:。我想有我统计是0Mode0Model,但1对于Model:它找到确切的词的实例的数量。

忘了我不能在我的情况下使用split。有什么办法可以让我不使用split吗?

Sal*_*ari 5

为此,我使用LINQ:

List<string> words = new List<string> { "Mode", "Model", "Model:" };
Text = "This is Model: x Type: Model: y aa: Mode e Model:";
var textArray = Text.Split(' ');
var countt = words.Select(item => textArray.ToList().Contains(item) ? 
             textArray.Count(d => d == item) : 0).ToArray();
Run Code Online (Sandbox Code Playgroud)

结果:

对于模式=>计数= 1

对于模型=>计数= 0

对于模型:=>计数= 3

编辑:我更喜欢为此目的使用LINQ,因为如您所见,在这种情况下它更容易,更干净,但是如果您正在寻找正则表达式解决方案,您可以尝试以下方法:

List<int> count = new List<int>();
foreach (var word in words)
{
    var regex = new Regex(string.Format(@"\b{0}(\s|$)", word), RegexOptions.IgnoreCase);
    count.Add(regex.Matches(Text).Count);
}
Run Code Online (Sandbox Code Playgroud)

EDIT2:或者将LINQ和Regex结合使用,而无需Split您可以:

List<int> count = words.Select(word => new Regex(string.Format(@"\b{0}(\s|$)", word), RegexOptions.IgnoreCase))
                               .Select(regex => regex.Matches(Text).Count).ToList();
Run Code Online (Sandbox Code Playgroud)