我需要能够在给定范围内的字符串中找到两个单词的出现次数。给定两个关键字和范围,返回出现次数关键字存在于给定范围内。因此,例如,具有以下字符串(关键字也包括在范围内):
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
”
但是这不会返回预期的输出。我不确定“正则表达式”是否是正确的方法。
答案 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;