我想扫描文本字符串以查找列表中包含的任何单词,并突出显示在字符串中找到的所有匹配项,而不管在C#中使用regexp的情况。有人会指出我正确的方向吗?很抱歉听起来非技术性,但希望它有意义。
例如:
列表包含“匹配”,“匹配”,“列表”,“文本”
string text =“匹配文本列表中的所有匹配项并突出显示匹配项”
输出:匹配所有匹配 文字中的列表,并突出显示匹配< /强>“
非常感谢任何帮助!
由于
答案 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**
请注意,此解决方案适用于您提供的示例,但有一些警告取决于您的真实场景:
\.
,\(
,\)
等。Match
不匹配match
。