Поиск шаблонов в строках C#, аналог SQL LIKE оператора
Быстрый ответ
Для работы со сложными шаблонами в C# используйте Regex.IsMatch, а для более простых задач поиска применяются встроенные методы работы со строками:
// Regex – на вашем боку в задачах поиска узоров!
bool isMatch = Regex.IsMatch(inputString, "^.*text.*$"); // Эквивалент в SQL: '%text%'
Методы Contains, StartsWith и EndsWith подходят для базовых проверок:
// Contains() – надежный помощник. Он может не быть сыщиком, но свою работу выполняет безукоризненно!
bool contains = inputString.Contains("text"); // Эквивалент в SQL: '%text%'
Для задач, требующих индивидуального подхода, можно создать метод Like() на основе регулярных выражений или расширений строк. Об этом мы поговорим подробнее.

Расширенное использование поиска по шаблонам
Перейдем к более детальному изучению материала.
Регулярные выражения – сильный инструмент поиска: создание метода Like()
Регулярные выражения более гибки в использовании, чем оператор LIKE в SQL. Они – что-то вроде универсального инструмента для поиска по шаблонам. Возьмем для примера метод Like():
// Такой метод Like обязательно стоит добавить в инструментарий каждого разработчика
public static bool Like(this string s, string pattern)
{
pattern = "^" + Regex.Escape(pattern).Replace("%", ".*").Replace("_", ".") + "$";
return Regex.IsMatch(s, pattern);
}
Стремление к точности: использование односимвольного шаблона
В SQL символ _ используется для обозначения любого одного символа. В регулярных выражениях такой же функцией обладает символ .. Воспользуйтесь этим при реализации своей версии метода Like() для использования шаблонов!
Мастерство фильтрации коллекций с помощью LINQ
С помощью LINQ можно фильтровать коллекции с той же лёгкостью, с которой вы смотрите кулинарные рецепты. Используя совокупно LINQ, строковые методы или вашу версию функции Like(), основанную на регулярных выражениях, вы сможете точно и эффективно отбирать данные:
// Фильтрация коллекций через LINQ похожа на отчётливую и чёткую работу профессионального кулинарного фильтра
var matches = myCollection.Where(x => x.Like("P%r_"));
Визуализация
Попробуем представить методы C# для работы с SQL LIKE в форме визуального процесса, напоминающего поиск необходимых ингредиентов для приготовления блюда:
Склад: ["Сахар", "Соль", "Паприка", "Перец"]
Ищем специи, начинающиеся на букву "П":
var spices = pantry.Where(i => i.StartsWith("P")); // Начинаем поиск...
Вот что у нас получилось:
Найденные специи: [🌶️ "Паприка", 🌶️ "Перец"]
В SQL оператор LIKE '%P%' ищет любое упоминание "P". В C# метод .Contains("P") работает схожим образом:
var spicesLikeP = pantry.Where(i => i.Contains("P")); // Используем возможности языка...
Соответственно, все строки, связанные с "P", найдены:
Результаты налицо: [🌶️ "Паприка", 🌶️ "Перец"]
Наблюдая за этим процессом, вы поймёте, что C# предлагает аналоги SQL LIKE для реализации эффективного и гибкого поиска.
Продвинутое использование с помощью методов расширения
Если стандартный функционал не в состоянии удовлетворить все ваши потребности и вам требуются дополнительные возможности, стоит рассмотреть вариант создания собственных методов расширения. Это позволит настраивать поиск по шаблонам так, чтобы он максимально отвечал специфике вашего проекта.
Тестируйте свои методы: Тестирование
Отлично, если вы разработали свои методы работы со строками. Тем не менее, их стоит протестировать на различных данных, чтобы убедиться в их корректной работе и надёжности. И, конечно же, обязательно уделите внимание тестированию крайних случаев!
Баланс производительности: Оптимизация
Не забывайте, что сложные регулярные выражения могут замедлить работу приложения. Старайтесь оптимизировать методы, например, кэшируя регулярные выражения или используя более простые строковые методы для обработки простых шаблонов.