簡體   English   中英

LINQ中的全字搜索

[英]Whole word search in LINQ

如何在LINQ中搜索整個單詞?

如果我在字符串列表中搜索單詞“car” {"carpenter","car repair","carrying","car workshop"}等等,結果應該是“汽車修理”和“汽車工作坊”只要 。 我嘗試下面的代碼

  List<string> _tags = (from item in string_array
                                 where item.ToLower().Contains(search_term)
                                 select item).ToList();

但是,包含總是返回相似的單詞,我在SO Linq Regex上找到了這個鏈接, 用於全字搜索 ,這並沒有提供使用Regx的完整答案。

因此,任何人都可以幫助在Regx中編寫答案,或者是與Linq一起使用的任何其他選項。

嘗試這個:

var result = items.Where(i => i.Split(' ').Any(word => word.ToLower() == "car")).ToList();

如果您需要考慮逗號,可以使用此代碼:

var reg = new Regex("\\bcar\\b", RegexOptions.IgnoreCase);

var items = new [] { "carpenter", "car repair", "carrying", "car workshop", "car, repair", "car. repair", "car,repair" };
var result = items.Where(word => reg.IsMatch(word)).ToList();

得到:

car repair 
car workshop 
car, repair 
car. repair 
car,repair
list.Where(item=>item.Split(' ').Contains("car"));

您可以執行以下操作:

  • 使用string.Split()拆分數組中的每個項目在空白區域
  • 搜索用這個詞Contains使用StringComaparer 超載

喜歡:

string[] string_array = {"carpenter", "car repair", "carrying", "car workshop"};
string word = "car";
 List<string> _tags = string_array.Where(r => r.Split()
                               .Contains(word, StringComparer.InvariantCultureIgnoreCase))
                                  .ToList();

輸出:

foreach (var item in _tags)
{
    Console.WriteLine(item);
}

輸出將是:

car repair
car workshop

我只是在搜索關鍵字之前和之后尋找空格。

   List<string> _tags = string_array.Where(
       s => s.ToUpper().Contains(" " + search_term.ToUpper()) ||   
         sToUpper().Contains(search_term.ToUpper() + " ") || s.ToUpper == search_term.ToUpper()).ToList();
  var strResult = strings.Where(x => x.Split(' ').Any(y => y.Equals("car"))).ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM