Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用精确单词的LINQ筛选列表_C#_Linq - Fatal编程技术网

C# 使用精确单词的LINQ筛选列表

C# 使用精确单词的LINQ筛选列表,c#,linq,C#,Linq,我有这个字符串列表。我只想筛选出那些与我搜索的关键字完全匹配的项目。例如,我有关键字“in”,我希望结果只过滤那些有确切单词“in”的项目。请帮忙 代码 static IEnumerable<string> GetData() { var strList = new List<string> { "I'm in love", "Coffee contains caffeine",

我有这个字符串列表。我只想筛选出那些与我搜索的关键字完全匹配的项目。例如,我有关键字“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;
       }
静态IEnumerable GetData()
{
var strList=新列表
{“我恋爱了”,
“咖啡含有咖啡因”,
“迄今为止最好的酒店”,
“我的内心”,
“在黑暗中”};
var filteredItems=strList.Where(x=>x.Contains(“in”);
返回filteredItems;
}
从我的列表中,我只想返回第1项和第5项,因为它们是具有确切单词“in”的项目


这里有一种方法:

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));

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

便宜的方法是,在字符串的前面和后面添加空格以匹配,在前面和后面添加空格以匹配您要查找的单词:

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;
   }
静态IEnumerable GetData(字符串匹配)
{
var strList=新列表
{“我恋爱了”,
“咖啡含有咖啡因”,
“迄今为止最好的酒店”,
“我的内心”,
“在黑暗中”};
match=match.ToLower();//进行不区分大小写的匹配
var filteredItems=strList.Where(x=>(“+x.ToLower()+”)。包含(“+match+”);
返回filteredItems;
}
我希望使用这种方法。例如:

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;
   }
字符串模式=”;
静态IEnumerable GetData()
{
var strList=新列表
{“我恋爱了”,
“咖啡含有咖啡因”,
“迄今为止最好的酒店”,
“我的内心”,
“在黑暗中”};
var filteredItems=strList.Where(x=>Regex.IsMatch(x,pattern));
返回filteredItems;
}
应该匹配的模式是:
^(.*)\s(.*)$

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

有点开玩笑,但正则表达式可能会给你更多:-)


HTH,Nathan

out的反面是in.expression不能包含lambda表达式,其他选项在图像_0中匹配0的情况下不起作用。jpg@StavBodik根据这些信息,我不知道如何帮助你。如果您的代码不起作用,请随意创建一个新问题。@StavBodik如果您不知道如何正确使用我的答案,请显示您的代码,以便我或其他人可以帮助您。不要只是否决投票并留下一个提供0有用信息的投诉。与Regex的精确匹配不适用于LINQ查询,您不能在其中包含lambda表达式。您的其他解决方案无法解决字符串中的精确匹配问题,因为例如,您希望在图像文件夹中查找文件,其中x是图像的编号:image_x.jpg…因此,如果您查找“0”与图像的包含匹配,则结果将为真。