LINQ搜索/匹配

Val*_*rio 3 c# linq

假设我们有一个这样的数组:

 var caps = new[] { "1512x", "001xx", "27058", "201xx", "4756x" };
Run Code Online (Sandbox Code Playgroud)

(原始数组很大,来自另一个linq查询)

我需要的是创建一个LINQ语句接受一个值,并尝试匹配foreseen数组中的一个值.

例如,如果我使用"15121",我需要匹配数组上的"1512x"值并返回它.显然,如果我使用"27058",它会找到完全匹配并简单地返回它.

在LINQ中可以吗?数组上的"通配符"字符是"x",但我可以更改它.

提前致谢!瓦莱里奥

Mar*_*age 6

您可以使用正则表达式:

var value = "15121";
var caps = new[] { "1512x", "001xx", "27058", "201xx", "4756x" };
var match = caps
  .FirstOrDefault(c => new Regex("^" + c.Replace("x", "[0-9]") + "$").IsMatch(value));
if (match != null)
  Console.WriteLine("{0} matches {1}", value, match);
Run Code Online (Sandbox Code Playgroud)

"模式" 001xx转换为正则表达式^001[0-9][0-9]$,依此类推.然后找到第一个匹配的正则表达式.

但是如果caps它很大,它可能表现不佳,因为必须编译每个正则表达式并将其转换为状态机,直到找到匹配为止.