2

我有这个字符串列表。我只想过滤掉那些与我搜索的关键字完全匹配的项目。例如,我有关键字“in”,我希望结果只过滤那些具有确切单词“in”的项目。请帮忙。

代码

static IEnumerable<string> GetData()
       {
           var strList = new List<string> 
           { "I'm in love",
            "Coffee contains caffeine",
            "The best inn so far",
            "Inside of me",
            "in the darkness"};
           var filteredItems = strList.Where(x => x.Contains("in"));
           return filteredItems;
       }

从我的列表中,我只想返回项目 1 和项目 5,因为它们是具有确切单词“in”的项目。

在此处输入图像描述

4

3 回答 3

5

这是一种方法:

var filteredItems = strList.Where(x => (" " + x + " ").Contains(" in "));

或这个:

var filteredItems = strList.Where(x => Regex.IsMatch(x, "(^| )in($| )"));

不区分大小写的版本:

var filteredItems = strList.Where(x => (" " + x .ToLower() + " ").Contains(" in "));
var filteredItems = strList.Where(x => Regex.IsMatch(x, "(^|\s)in($|\s)",
                                                     RegexOptions.IgnoreCase));
于 2013-03-21T01:38:25.090 回答
2

我希望使用Regex.IsMatch方法。例如:

string pattern = "<your pattern here>";

static IEnumerable<string> GetData()
   {
       var strList = new List<string> 
       { "I'm in love",
        "Coffee contains caffeine",
        "The best inn so far",
        "Inside of me",
        "in the darkness"};
       var filteredItems = strList.Where(x => Regex.IsMatch(x, pattern));
       return filteredItems;
   }

应该匹配的模式是:^(.*)\sin\s(.*)$

所以零个或多个字符,然后是“in”(即被空格包围),然后是零个或多个字符。您可以使用诸如Rubular之类的东西或网络上的许多其他类似的东西来用您的字符串测试您的正则表达式,以确保您获得正确的里程:-)

有点口不择言,但正则表达式可能会给您带来更多问题:-)

HTH,弥敦道

于 2013-03-21T01:41:05.157 回答
1

正确的方法是构造一个正则表达式。

便宜的方法,在字符串的前后添加空格以匹配,匹配你正在寻找的单词,前后有空格:

static IEnumerable<string> GetData(string match)
   {
       var strList = new List<string> 
       { "I'm in love",
        "Coffee contains caffeine",
        "The best inn so far",
        "Inside of me",
        "in the darkness"};

       match = match.ToLower(); //to do case insensitive matching
       var filteredItems = strList.Where(x => (" " +x.ToLower() + " ").Contains(" "+match+" "));
       return filteredItems;
   }
于 2013-03-21T01:39:31.080 回答