计算字符串中两个单词的出现次数

时间:2015-11-22 01:22:02

标签: c# regex

我需要能够在给定范围内的字符串中找到两个单词的出现次数。给定两个关键字和范围,返回出现次数关键字存在于给定范围内。因此,例如,具有以下字符串(关键字也包括在范围内):

input string:
    "on top on bottom on side Works this Magic door"

input filters: "on", "side", range: 6

(范围6表示在我们搜索的那两个之间最多可以有四个其他单词)

output should be: 3 

(因为“on”和“side”的匹配发生了3次。

示例2:

input string:
    "on top on bottom on side Works this Magic door"

input filters: "on", "side", range: 3

output should be: 1

我试过这个正则表达式“\bon\W+(?:\w+\W+){1,6}?side\b” 但是这不会返回预期的输出。我不确定“正则表达式”是否是正确的方法。

2 个答案:

答案 0 :(得分:1)

您的正则表达式对于范围8是正确的。问题是重叠匹配,这不能在一次搜索中完成。你必须做这样的事情:

string s = "on top on bottom on side Works this Magic door";
Regex r = new Regex(@"\bon\W+(?:\w+\W+){0,4}side\b");
int output = 0;
int start = 0;
while (start < s.Length)
{
    Match m = r.Match(s, start);
    if (!m.Success) { break; }
    Console.WriteLine(m.Value);
    output++;
    start = m.Index + 1;
}
Console.WriteLine(output);

答案 1 :(得分:1)

试试这个

            string input = "on top on bottom on side Works this Magic door";
            List<string> array = input.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();

            int onIndex = array.IndexOf("on");
            int sideIndex = array.IndexOf("side");

            int results = sideIndex - onIndex - 1;