如何在C#中使用Regex实现带变量的实时对象搜索?
在C#中通过参数动态生成Regex匹配模式
你直接把变量search写进字符串里的方式是行不通的——C#会把[search]当成字面量处理,不会替换成变量的实际值。要实现动态生成正则模式,分两种常见场景处理:
场景1:搜索内容是普通字符(无正则元字符)
如果search参数只是普通字母、数字这类无特殊正则含义的字符,直接用字符串插值或String.Format拼接模式即可:
// 传入的搜索参数 string search = "M"; // 用字符串插值生成正则模式 string pattern = $@"\b[{search}]\w+"; Regex rg = new Regex(pattern);
场景2:搜索内容可能包含正则元字符
如果search参数可能包含.、*、[、\这类正则元字符,直接拼接会破坏正则结构,导致匹配出错。必须先用Regex.Escape()方法转义特殊字符:
// 传入包含正则元字符的参数,比如"[a" string search = "[a"; // 转义所有正则特殊字符 string escapedSearch = Regex.Escape(search); // 生成安全的正则模式 string pattern = $@"\b[{escapedSearch}]\w+"; Regex rg = new Regex(pattern);
额外说明
如果你想要的是匹配以整个search字符串开头的单词(而非字符集中的任意字符开头),需要去掉模式里的[],示例:
string pattern = $@"\b{escapedSearch}\w+";
这样当search是"Mc"时,会匹配"McDonald"这类单词,而非以M或c开头的单词。
内容的提问来源于stack exchange,提问作者d0rito
相关产品推荐
相关产品推荐

