在C#中如何匹配含通配符*的两个字符串?
C#中通配符字符串匹配的实现方式
不能直接把带*的string2当作正则模式传给Regex.Match,因为正则表达式里的*是量词,作用是匹配前面的字符零次或多次,和你需求里代表任意文本的通配符不是一个意思。
要实现需求,需要先把通配符风格的字符串转换成合法的正则表达式,具体步骤如下:
- 用
Regex.Escape转义所有正则特殊字符(比如.、+这类),避免它们被当作正则语法解析 - 把转义后的
\*替换成正则中代表任意字符(除换行)的.*
示例代码:
string string1 = "/api/mymember/get"; string string2 = "/api/*/get"; // 转换通配符为正则模式 string regexPattern = Regex.Escape(string2).Replace("\\*", ".*"); Match matchResult = Regex.Match(string1, regexPattern); if (matchResult.Success) { Console.WriteLine("字符串匹配成功"); } else { Console.WriteLine("字符串匹配失败"); }
如果不想依赖正则,也可以自定义逻辑:把string2按*分割成多个子串,然后依次检查这些子串是否按顺序出现在string1中,但这种方式需要处理边界情况(比如开头/结尾的*),正则方案更简洁通用。
内容的提问来源于stack exchange,提问作者user23655351
相关产品推荐
相关产品推荐

