Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

Поиск шаблонов в строках C#, аналог SQL LIKE оператора

Быстрый ответ

Для работы со сложными шаблонами в C# используйте Regex.IsMatch, а для более простых задач поиска применяются встроенные методы работы со строками:

csharp
Скопировать код
// Regex – на вашем боку в задачах поиска узоров!
bool isMatch = Regex.IsMatch(inputString, "^.*text.*$"); // Эквивалент в SQL: '%text%'

Методы Contains, StartsWith и EndsWith подходят для базовых проверок:

csharp
Скопировать код
// Contains() – надежный помощник. Он может не быть сыщиком, но свою работу выполняет безукоризненно!
bool contains = inputString.Contains("text"); // Эквивалент в SQL: '%text%'

Для задач, требующих индивидуального подхода, можно создать метод Like() на основе регулярных выражений или расширений строк. Об этом мы поговорим подробнее.

Кинга Идем в IT: пошаговый план для смены профессии

Расширенное использование поиска по шаблонам

Перейдем к более детальному изучению материала.

Регулярные выражения – сильный инструмент поиска: создание метода Like()

Регулярные выражения более гибки в использовании, чем оператор LIKE в SQL. Они – что-то вроде универсального инструмента для поиска по шаблонам. Возьмем для примера метод Like():

csharp
Скопировать код
// Такой метод Like обязательно стоит добавить в инструментарий каждого разработчика
public static bool Like(this string s, string pattern)
{
    pattern = "^" + Regex.Escape(pattern).Replace("%", ".*").Replace("_", ".") + "$";
    return Regex.IsMatch(s, pattern);
}
Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Стремление к точности: использование односимвольного шаблона

В SQL символ _ используется для обозначения любого одного символа. В регулярных выражениях такой же функцией обладает символ .. Воспользуйтесь этим при реализации своей версии метода Like() для использования шаблонов!

Мастерство фильтрации коллекций с помощью LINQ

С помощью LINQ можно фильтровать коллекции с той же лёгкостью, с которой вы смотрите кулинарные рецепты. Используя совокупно LINQ, строковые методы или вашу версию функции Like(), основанную на регулярных выражениях, вы сможете точно и эффективно отбирать данные:

csharp
Скопировать код
// Фильтрация коллекций через LINQ похожа на отчётливую и чёткую работу профессионального кулинарного фильтра
var matches = myCollection.Where(x => x.Like("P%r_"));

Визуализация

Попробуем представить методы C# для работы с SQL LIKE в форме визуального процесса, напоминающего поиск необходимых ингредиентов для приготовления блюда:

Markdown
Скопировать код
Склад: ["Сахар", "Соль", "Паприка", "Перец"]

Ищем специи, начинающиеся на букву "П":

csharp
Скопировать код
var spices = pantry.Where(i => i.StartsWith("P")); // Начинаем поиск...

Вот что у нас получилось:

Markdown
Скопировать код
Найденные специи: [🌶️ "Паприка", 🌶️ "Перец"]

В SQL оператор LIKE '%P%' ищет любое упоминание "P". В C# метод .Contains("P") работает схожим образом:

csharp
Скопировать код
var spicesLikeP = pantry.Where(i => i.Contains("P")); // Используем возможности языка...

Соответственно, все строки, связанные с "P", найдены:

Markdown
Скопировать код
Результаты налицо: [🌶️ "Паприка", 🌶️ "Перец"]

Наблюдая за этим процессом, вы поймёте, что C# предлагает аналоги SQL LIKE для реализации эффективного и гибкого поиска.

Продвинутое использование с помощью методов расширения

Если стандартный функционал не в состоянии удовлетворить все ваши потребности и вам требуются дополнительные возможности, стоит рассмотреть вариант создания собственных методов расширения. Это позволит настраивать поиск по шаблонам так, чтобы он максимально отвечал специфике вашего проекта.

Тестируйте свои методы: Тестирование

Отлично, если вы разработали свои методы работы со строками. Тем не менее, их стоит протестировать на различных данных, чтобы убедиться в их корректной работе и надёжности. И, конечно же, обязательно уделите внимание тестированию крайних случаев!

Баланс производительности: Оптимизация

Не забывайте, что сложные регулярные выражения могут замедлить работу приложения. Старайтесь оптимизировать методы, например, кэшируя регулярные выражения или используя более простые строковые методы для обработки простых шаблонов.

Полезные материалы

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой метод в C# используется для работы с сложными шаблонами?
1 / 5