无论标签顺序如何都可以搜索文件名的文本框

问题描述 投票:0回答:1

我有一个带有图像的 C# .Net 应用程序。图像的命名方式如下 “猫碗.jpg” “碗狗.jpg” “负鼠.jpg” “浣熊碗夜.jpg” 我想创建一个搜索文本框,以便在写东西时搜索名称。

例如,如果我写“狗之夜”,我想看到“碗狗.jpg”和“浣熊碗之夜.jpg”

我尝试用正则表达式来做到这一点

string[] imageFiles = Directory.GetFiles(imageFolderPath, "*.jpg");
string searchText = searchTextBox.Text;
foreach (string imageFile in imageFiles)
{
   string pattern = @"" + searchPhrases +"";
   Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);   
   if (regex.IsMatch(imageFile)) {
//code

但它没有像我希望的那样工作 我知道有 String.Contains() 但它也没有按照我想要的方式工作 我正在寻找类似按标签搜索图像的东西

c# regex search split tags
1个回答
1
投票

您可以将搜索字符串拆分为单个单词,并对每个单词执行

string.Contains
操作:

var searchWords = searchText.Split(" ");
var matches = imageFiles.Where(f => searchWords.Any(w => f.Contains(w, stringComparison.CurrentCultureIgnoreCase)));

这应该会给你想要的结果,而不需要复杂的正则表达式。您还可以考虑某种评分,以便更好的匹配出现在结果列表中的较高位置,和/或某种模糊字符串匹配(如果您想让字符串足够接近)。

© www.soinside.com 2019 - 2024. All rights reserved.