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

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

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

Для работы со сложными шаблонами в 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);
}

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

В 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 для реализации эффективного и гибкого поиска.

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

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

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

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

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

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

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