C#中如何判断字典是否含带通配符的键并获取匹配键?
用LINQ实现字典键的通配符匹配判断与查询
当然可以用LINQ实现这个需求,结合通配符匹配逻辑就能完成,下面给两种常用实现方式:
方法一:结合正则表达式
把通配符*转换为正则表达式的任意匹配符.*,再通过LINQ的Any和Where方法完成判断与查询:
首先引入必要命名空间:
using System.Linq; using System.Text.RegularExpressions;
判断是否存在匹配键
// 将"A*C"转换为正则表达式规则:以A开头、以C结尾,中间任意字符 bool hasMatchedKey = myDict.Keys.Any(key => Regex.IsMatch(key, @"^A.*C$")); // 此处hasMatchedKey结果为true
获取所有匹配的键
List<string> matchedKeys = myDict.Keys.Where(key => Regex.IsMatch(key, @"^A.*C$")).ToList(); // 此处matchedKeys结果为["ABC"]
方法二:使用WildcardPattern(.NET Core 3.0+)
如果是.NET Core 3.0及以上版本,直接用System.IO.WildcardPattern更省心,它原生支持通配符语法:
引入命名空间:
using System.Linq; using System.IO;
判断是否存在匹配键
WildcardPattern wildcard = new WildcardPattern("A*C", WildcardOptions.None); bool hasMatchedKey = myDict.Keys.Any(key => wildcard.IsMatch(key));
获取所有匹配的键
List<string> matchedKeys = myDict.Keys.Where(key => wildcard.IsMatch(key)).ToList();
两种方法对比:正则表达式适合更复杂的匹配规则,WildcardPattern则对通配符场景更友好,代码可读性更高。
内容的提问来源于stack exchange,提问作者Jaume
相关产品推荐
相关产品推荐

