【发布时间】:2016-06-29 15:05:12
【问题描述】:
我想在我的ObservableCollection 中搜索我能找到的特定项目的任何匹配项。在这种情况下,我的项目是“艺术家”。基本上它只是一个搜索栏,用户可以在其中输入艺术家姓名。
我这样做了,它可以工作,但用户必须输入完全相同的值:
//user type "david guetta"
if (myCollection.Any(x => x.artist== input.Value))
{
//...
}
如何在我的收藏中找到部分匹配项,用户可以在其中键入“david”并检索包含此字符串的所有艺术家?
我尝试将正则表达式与字符串数组一起使用,效果也很好,但我无法对我的集合做同样的事情。
string[] artists=
{
"Malcom George",
"Willis H. David",
"David Bowie",
"Davidson"
};
string pattern = input.Value;
foreach (string s in artists)
{
if (Regex.IsMatch(s, pattern, RegexOptions.IgnoreCase))
{
// ...
}
}
【问题讨论】:
-
除了能够在提供项目的部分但不是全部单词时检索结果(这可以通过 Matteo 在他的回答中建议的内容来完成),您可能有兴趣考虑nuget [模糊逻辑] 包之一 (nuget.org/packages/DuoVia.FuzzyStrings) 使您的应用能够在仅提供真实数据的近似值时返回结果。
标签: c# .net regex observablecollection