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

C# 计算字符串中两个单词的出现次数,c#,regex,C#,Regex,我需要能够找到给定范围内字符串中两个单词的出现次数。给定两个关键字和范围,返回给定范围内存在的关键字出现次数。例如,具有以下字符串(关键字也包括在范围内): (范围6表示我们搜索的这两个词之间最多可以有四个其他单词) (因为“on”和“side”的匹配发生了3次 例2: input string: "on top on bottom on side Works this Magic door" input filters: "on", "side", range: 3 output

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


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

(因为“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}”侧\b

但是,这不会返回预期的输出。我不确定“regex”是否正确。您的regex对于范围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);
string s=“在顶部,在底部,在侧面,可以打开这扇神奇的门”;
正则表达式r=newregex(@“\bon\W+(?:\W+\W+{0,4}侧\b”);
int输出=0;
int start=0;
while(开始
试试这个

            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;
string input=“在顶部,在底部,在侧面,可以打开这扇神奇的门”;
List array=input.Split(新字符[]{''},StringSplitOptions.RemoveEmptyEntries.ToList();
int-onIndex=array.IndexOf(“on”);
int sideIndex=array.IndexOf(“side”);
int results=sideIndex-onIndex-1;

这是我读过的一个问题中最令人困惑的描述之一。你能编辑这个问题,让它非常清楚输入是什么,匹配的是什么,输出是什么,以及计算是如何执行的吗?进行了编辑,希望能有所帮助。谢谢。仍然让人困惑。这个问题中的范围到底是什么意思文本,即它如何影响响应?同样在您的第一个示例中,“on”出现3次,但“side”只发生一次。为什么输出为3?因此,为了总结,您需要描述问题的确切要求。范围6意味着,我们搜索的这两个词之间最多可以有四个其他单词?是的。这意味着总共有6个单词,包括关键字(2)啊,所以对于任何给定的范围,我都会选择-2
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);
            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;