Подтвердить что ты не робот

Поиск целых слов в LINQ

Как искать целое слово в LINQ?

Если я ищу слово "автомобиль" в списке строк {"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.

4b9b3361

Ответ 1

Попробуйте следующее:

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

Ответ 2

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

Ответ 3

Вы можете сделать следующее:

  • Разделите каждый элемент в массиве на белом фоне, используя 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

Ответ 4

Я просто ищу пробелы до и после ключевого слова поиска.

   List<string> _tags = string_array.Where(
       s => s.ToUpper().Contains(" " + search_term.ToUpper()) ||   
         sToUpper().Contains(search_term.ToUpper() + " ") || s.ToUpper == search_term.ToUpper()).ToList();

Ответ 5

  var strResult = strings.Where(x => x.Split(' ').Any(y => y.Equals("car"))).ToList();