匹配并突出显示字符串中列表中的关键字
本文关键字:列表 关键字 字符串 显示 | 更新日期: 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
。