查找“”的精确单词的实例数;x〃;在文本中

本文关键字:文本 实例 单词 查找 | 更新日期: 2023-09-27 17:49:16

我正在使用c#来查找"x"的确切单词的实例数。例如:

List<string> words = new List<string> {"Mode", "Model", "Model:"};
Text= "This is Model: x Type: y aa: e";

我用过Regex:

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

但它不起作用。上述代码的结果给出了每个ModeModelModel:count=1。我想让我的计数为0用于Mode0用于Model,但1用于Model:,它找到了确切单词的实例数。

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

查找“”的精确单词的实例数;x〃;在文本中

我使用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();

结果:

对于模式=>计数=1

对于型号=>计数=0

对于型号:=>计数=3

编辑:我更喜欢使用LINQ,因为正如您所看到的,在这种情况下它更容易、更干净,但如果您正在寻找Regex解决方案,您可以尝试以下方法:

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);
}

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();

尽管@S。Akhbari的解决方案有效。。。我认为使用Linq更清洁:

var splitted = Text.Split(' ');
var items = words.Select(x => new { Word = x, Count = splitted.Count(y => y == x) });

每个item将具有WordCount属性。

点击此处查看操作

'b在单词边界上匹配。

 for(i=0; i<words.count; i++)
 {
     word= list[i] 
     var regex = new Regex(string.Format(@"'b{0}'b", word), 
                      RegexOptions.IgnoreCase);
     int count= regex.Matches(Text).Count; 
  }
相关文章: