查找" x"的确切单词的实例数。在文本中

时间:2016-06-24 17:34:01

标签: c# regex string

我正在使用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) 
}

但它不起作用。上面代码的结果为count=1ModeModel提供了Model:。 我希望0Mode0Model1Model:split为{{1}}确切单词的实例。

忘了在我的情况下我不能使用拆分。我有什么办法可以不使用{{1}}吗?

3 个答案:

答案 0 :(得分: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();

结果:

  

对于Mode =&gt; count = 1

     

对于Model =&gt; count = 0

     

对于Model:=&gt; count = 3

编辑:我更喜欢使用LINQ来实现此目的,因为您认为在这种情况下它更容易和更清洁,但如果您正在寻找Regex解决方案,您可以试试这个:< / p>

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

答案 1 :(得分:2)

虽然@ S.Akhbari的解决方案有效......我认为使用Linq更清洁:

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

每个item都有WordCount属性。

See it in action here

答案 2 :(得分:0)

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