如何在C#中通过Regex正确引用关键词变量进行匹配?
C# Regex通过变量引用关键词匹配失败的解决方法
问题场景
需要用正则表达式在字符串列表中匹配指定关键词(例如“SOS fire”):
- 直接将关键词写死在正则表达式中时,匹配正常;
- 通过变量
keyword引用关键词时,匹配失败。
错误代码示例
string keyword = "SOS fire"; // 未转义直接使用变量,若关键词含正则元字符会导致匹配失败 Regex regex = new Regex(keyword); List<string> targetStrings = new List<string> { "SOS fire alert", "routine check" }; var matchedResults = targetStrings.Where(s => regex.IsMatch(s)).ToList(); // 预期匹配到"SOS fire alert",实际可能因元字符解析问题匹配失败
解决方法
核心问题是:当关键词包含正则元字符(如.、*、+等)时,直接用变量传入正则表达式会被引擎解析为特殊语法,而非普通文本。需使用Regex.Escape()方法对关键词进行转义,将元字符转换为字面量。
修正后的代码
string keyword = "SOS fire"; // 对关键词进行正则转义,确保所有字符被当作普通文本处理 Regex regex = new Regex(Regex.Escape(keyword)); List<string> targetStrings = new List<string> { "SOS fire alert", "routine check" }; var matchedResults = targetStrings.Where(s => regex.IsMatch(s)).ToList(); // 此时可正确匹配到包含关键词的字符串
补充说明
- 如果需要完全匹配(即字符串与关键词完全一致),可在转义后的关键词前后添加锚定符:
Regex regex = new Regex($"^{Regex.Escape(keyword)}$"); Regex.Escape()会自动处理所有正则特殊字符,无需手动逐个转义,适配各种关键词场景。
内容的提问来源于stack exchange,提问作者Headshot
相关产品推荐
相关产品推荐

