C#中使用正则表达式批量为指定字符串两端加*号实现高亮
C# 批量关键词正则高亮实现方案
实现代码
场景1:匹配任意位置的关键词(适配你给出的输入输出示例)
如果不需要限制关键词为独立单词,只要子串匹配就高亮,使用以下代码:
using System.Text.RegularExpressions; using System.Collections.Generic; using System.Linq; // 你的输入文本 string inputText = "dsadf335aa"; // 待高亮的关键词列表 List<string> highlightTargets = new List<string> { "123", "234", "335" }; // 处理关键词:转义正则元字符,避免关键词含.、*、?等特殊字符时匹配异常 IEnumerable<string> escapedTargets = highlightTargets.Select(t => Regex.Escape(t)); // 拼接正则匹配规则 string matchPattern = string.Join("|", escapedTargets); // 执行替换:$&为正则内置占位符,代表匹配到的原始内容 string result = Regex.Replace(inputText, matchPattern, "*$&*");
执行后result的值为dsadf*335*aa,符合预期输出。
场景2:仅匹配独立单词
如果需要关键词前后为单词边界(前后不能出现字母、数字、下划线),只需要修改匹配规则即可:
// 用捕获组包裹关键词列表,前后加单词边界限制 string matchPattern = @"\b(" + string.Join("|", escapedTargets) + @")\b";
占位符识别异常问题说明
C# Regex.Replace的替换模板中,引用匹配内容需要使用正则内置的占位符:
$&:代表整个正则表达式匹配到的完整内容$1:代表第一个捕获组匹配到的内容
不存在{s}这类占位符写法,替换为标准的$&即可正常识别。
内容的提问来源于stack exchange,提问作者GameKiller168
相关产品推荐
相关产品推荐

