匹配并突出显示字符串中列表中的关键字

时间:2014-05-22 19:47:02

标签: c# asp.net regex

我想扫描文本字符串以查找列表中包含的任何单词,并突出显示在字符串中找到的所有匹配项,而不管在C#中使用regexp的情况。有人会指出我正确的方向吗?很抱歉听起来非技术性,但希望它有意义。

例如:

列表包含“匹配”,“匹配”,“列表”,“文本”

string text =“匹配文本列表中的所有匹配项并突出显示匹配项”

输出:匹配所有匹配 文字中的列表,并突出显示匹配< /强>“

非常感谢任何帮助!

由于

1 个答案:

答案 0 :(得分:1)

如果你有一系列搜索词:

var searches = new [] { "Match", "matches", "list", "text" };

和要搜索的字符串:

var text = "Match all matches from the list in text and highlight the matches";

您可以将这些单词组合成一个regular expression,搜索第一个,第二个或第三个等,将它们与String.Join相结合(\b表示单词边界,所以只有整个单词匹配):

var regex = @"\b(" + String.Join("|", searches) + @")\b";
// regex: \b(Match|matches|list|text)\b

然后,应用搜索并使用替换突出显示是一个简单的问题(在替换表达式中,$1是对第一个匹配组的引用,例如,在原始短语中找到的单词) :

var result = Regex.Replace(text, regex, @"**$1**");
// result: **Match** all **matches** from the **list** in **text** and highlight the **matches**

Code Demo

请注意,此解决方案适用于您提供的示例,但有一些警告取决于您的真实场景:

  • 如果您的搜索“字词”包含正则表达式识别的特殊字符,则可能必须将其删除,例如\.\(\)等。
  • 上面提供的当前代码示例区分大小写,因此例如Match 匹配match