如何搜索仅包含部分文本的列表框项

本文关键字:文本 列表 包含部 何搜索 搜索 | 更新日期: 2023-09-27 18:10:11

我有一个c# WinForms应用程序。有一个列表框,里面填满了以下格式的值:

category:user:id
Food:tester:17

等。

现在,我需要得到如果一个项目包含在这个Listbox中,只知道类别和ID,我不知道用户。技术上讲,我需要这样做(伪代码):

if(MyListBox.Items.Contains("Food:*:17"))

,其中*表示"任何东西"。有办法做到这一点吗?

如何搜索仅包含部分文本的列表框项

假设列表框直接用字符串填充,最简单的方法是linq和regex的组合:

 if(MyListBox.Items.Cast<string>().Any(s => Regex.IsMatch(s, "Food:.*:17")))  //(For RegEx: using System.Text.RegularExpressions )

或更严格,如果项总是value:value:value的组合,并且只检查第一个和第三个值:

if (MyListBox.Items.Cast<string>().Any(s => { var values = s.Split(':'); return values[0] == "Food" && values[2] == "17"; }))

你可以这样做

var value = MyListBox.Items.Cast<string>()
    .FirstOrDefault(m => m.Contains("Food:") && m.Contains(":17"));
if (value != null) {
    // you have a match
}

试试这样

var res =
               MyListBox.items.SingleOrDefault(
                    item =>
                    item.Contains("Food:") && item.Contains(":17") &&
                    item.IndexOf(":17", StringComparison.InvariantCulture) >
                    item.IndexOf("Food:", StringComparison.InvariantCulture));
                if ( !string.IsNullOrEmpty(res))
            {
              //your code here 
            }

            }