Регулярные выражения в C# с примерами: на практике

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Регулярные выражения в C# с примерами: на практике

Регулярные выражения (regex) — мощный инструмент для поиска, проверки и замены текста по шаблону. В C# (.NET) работа с ними реализована через класс System.Text.RegularExpressions.Regex. В этой статье мы разберем основные возможности на реальных примерах: от простой проверки email до извлечения данных из HTML. Все примеры готовы к копированию и использованию в ваших проектах.

Основы работы с Regex в C#

Класс Regex предоставляет три ключевых метода:

  • IsMatch — проверяет, соответствует ли строка шаблону;
  • Match — находит первое совпадение;
  • Matches — находит все совпадения.

Простой пример — проверка, содержит ли строка цифры:

using System;
using System.Text.RegularExpressions;

public class RegexExample
{
    public static void Main()
    {
        string text = "Мой номер: 12345";
        string pattern = @"\d+"; // одна или более цифр

        bool hasDigits = Regex.IsMatch(text, pattern);
        Console.WriteLine(hasDigits); // True
    }
}

Обратите внимание на @ перед строкой — это verbatim string literal, который отключает экранирование обратной косой черты. Без него пришлось бы писать "\\d+".

Проверка email и номера телефона

Валидация email

Проверка email — классическая задача. Простой, но рабочий паттерн:

public static bool IsValidEmail(string email)
{
    string pattern = @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$";
    return Regex.IsMatch(email, pattern);
}

// Использование
Console.WriteLine(IsValidEmail("user@example.com")); // True
Console.WriteLine(IsValidEmail("user@.com"));        // False

Разберем паттерн:

  • ^ — начало строки;
  • [a-zA-Z0-9._%+-]+ — локальная часть (буквы, цифры и спецсимволы);
  • @ — символ "собаки";
  • [a-zA-Z0-9.-]+ — домен;
  • \. — точка (экранированная);
  • [a-zA-Z]{2,} — доменная зона (не менее 2 букв);
  • $ — конец строки.

Проверка номера телефона

Пример для российского формата (+7 XXX XXX-XX-XX):

public static bool IsValidRussianPhone(string phone)
{
    string pattern = @"^\+7\d{3}\d{3}-\d{2}-\d{2}$";
    // Или более гибкий вариант:
    // @"^\+7[\s-]?\d{3}[\s-]?\d{3}[\s-]?\d{2}[\s-]?\d{2}$"
    return Regex.IsMatch(phone, pattern);
}

Извлечение данных из текста с помощью групп захвата

Группы захвата (скобки ()) позволяют извлекать части совпадения. Например, извлечем все email из текста:

string text = "Контакты: support@site.com, admin@test.org, info@company.net";
string pattern = @"([a-zA-Z0-9._%+-]+)@([a-zA-Z0-9.-]+)\.([a-zA-Z]{2,})";

MatchCollection matches = Regex.Matches(text, pattern);
foreach (Match match in matches)
{
    Console.WriteLine($"Полный email: {match.Value}");
    Console.WriteLine($"Локальная часть: {match.Groups[1].Value}");
    Console.WriteLine($"Домен: {match.Groups[2].Value}");
    Console.WriteLine($"Зона: {match.Groups[3].Value}");
    Console.WriteLine("---");
}

Результат:

Полный email: support@site.com
Локальная часть: support
Домен: site
Зона: com
---

Группы нумеруются с 1 (группа 0 — всё совпадение). Можно давать им имена:

string pattern = @"(?<user>[a-zA-Z0-9._%+-]+)@(?<domain>[a-zA-Z0-9.-]+)\.(?<tld>[a-zA-Z]{2,})";
// Доступ: match.Groups["user"].Value

Извлечение ссылок из HTML

string html = @"<a href='https://example.com'>Example</a> 
                <a href="/about">About us</a>";
string pattern = @"<a\s+href=['""]([^'""]+)['""]>";

MatchCollection matches = Regex.Matches(html, pattern);
foreach (Match match in matches)
{
    Console.WriteLine(match.Groups[1].Value);
}
// Вывод:
// https://example.com
// /about

Замена текста с регулярными выражениями

Метод Replace позволяет заменять части строк по шаблону. Пример — цензурирование email в логах:

string log = "User user@example.com logged in. Admin admin@site.com approved.";
string pattern = @"\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}\b";
string result = Regex.Replace(log, pattern, "***@***.***");
Console.WriteLine(result);
// User ***@***.*** logged in. Admin ***@***.*** approved.

Форматирование дат

Заменим формат даты с "2025-03-15" на "15.03.2025":

string dates = "2025-03-15, 2024-12-01";
string pattern = @"(\d{4})-(\d{2})-(\d{2})";
string result = Regex.Replace(dates, pattern, "$3.$2.$1");
Console.WriteLine(result);
// 15.03.2025, 01.12.2024

Здесь $1, $2, $3 — ссылки на группы захвата.

Использование MatchEvaluator для сложной замены

string text = "Цена: 1500 руб, скидка: 300 руб";
string pattern = @"\d+(?=\s*руб)";
string result = Regex.Replace(text, pattern, match =>
{
    int value = int.Parse(match.Value);
    return (value *                

Блоги

Рекомендаций по книгам