目前在做关键字检索时,要能完成对逗号隔开的多个关键字的检索,但是在richtextbox2输出结果中的高亮显示时会同时高亮之后要检索的词,希望最后实现每搜索一个词都只在句子中对这个词描红
代码如下:
private void find_string()//关键字
{
string keyword = comboBox1.Text;
string[] strArr = keyword.Split(',');
foreach (string s in strArr)
{
string str5 = richTextBox1.Text;
string str2 = ":";
int len = 20;
Regex reg = new Regex(s); //定义正则表达式 匹配
string result1 = reg.Match(str5).Value;
Regex reg0 = new Regex(string.Format(@"(?<prefix>[\s\S]{1})(?<key>{0})(?<suffix>[\s\S]{2})", s, "{0," + len + "}", "{0," + len + "}"));
MatchCollection mc0 = reg0.Matches(richTextBox1.Text);
//设置序号
int index = 1;
foreach (Match m0 in mc0) //循环匹配到的字符
{
this.richTextBox2.AppendText(index.ToString() + str2.ToString() + m0.Groups["prefix"] + m0.Groups["key"] + m0.Groups["suffix"] + "..." + Environment.NewLine);
index++;
}
//关键字高亮
MatchCollection mc = reg.Matches(richTextBox1.Text);
foreach (Match m in mc)
{
richTextBox1.SelectionStart = m.Index;
richTextBox1.SelectionLength = m.Length;
richTextBox1.SelectionColor = Color.Red;
}
//关键字高亮检索栏
MatchCollection mc1 = reg.Matches(richTextBox2.Text);
foreach (Match m1 in mc1)
{
richTextBox2.SelectionStart = m1.Index;
richTextBox2.SelectionLength = m1.Length;
richTextBox2.SelectionColor = Color.Blue;
}
}
}