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

本文关键字:列表 关键字 字符串 显示 | 更新日期: 2023-09-27 18:04:45

我想扫描一个文本字符串,查找列表中包含的任何单词,并突出显示字符串中找到的所有匹配项,无论使用c#中的regexp是否出现。有人能给我指个方向吗?抱歉听起来很不专业,但希望你能理解。

例如

:

List包含"Match","matches", " List "," text"

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

输出:"文本中从列表中匹配所有匹配,并突出显示匹配"

任何帮助将非常感激!

谢谢

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

如果您有一个搜索词数组:

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

和要搜索的字符串:

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

您可以将单词与String组合成搜索第一、第二或第三等的正则表达式。连接 ('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**
<<p> (代码演示/strong>)

请注意,这个解决方案在您给出的示例中工作得很好,但是根据您的实际场景,有许多注意事项:

  • 如果你搜索的"words"有Regex识别的特殊字符,你可能不得不转义它们,例如,'., '(, ')等。
  • 上面提供的当前代码示例是区分大小写的,因此,例如Match匹配match