嗨我有一个名称类型对象的集合,我想对它进行通配符搜索.例如,如果我提供搜索条件,*ABC那么返回的名称应该以ABC.如果我提供搜索条件,ABC*那么返回的名称应该以ABC.如果我提供搜索条件,*ABC*则返回的名称应包含ABC.如果我提供搜索条件,?ABC则返回名称的第二个,第三个和第四个字符应ABC分别为第一个字符可以是任何字符.
Sam*_*ack 10
这是您可能使用的扩展方法
public static class EnumerableExtensions
{
public static IEnumerable<T> MatchesWildcard<T>(this IEnumerable<T> sequence, Func<T,string> expression, string pattern)
{
var regEx = WildcardToRegex(pattern);
return sequence.Where(item => Regex.IsMatch(expression(item), regEx));
}
public static string WildcardToRegex(string pattern)
{
return "^" + Regex.Escape(pattern).
Replace("\\*", ".*").
Replace("\\?", ".") + "$";
}
}
Run Code Online (Sandbox Code Playgroud)
使用方法如下:
void Main()
{
var items = new[] { new MyObj { MyProperty = "ABC123" },
new MyObj { MyProperty = "123ABC" },
new MyObj { MyProperty = "123ABC456" },
};
var matches = items.MatchesWildcard(item => item.MyProperty, "???ABC");
}
public class MyObj
{
public string MyProperty {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
(来自CodeProject的 WildcardToRegex )
| 归档时间: |
|
| 查看次数: |
8843 次 |
| 最近记录: |