← Все вопросы

Как использовать регулярные выражения (Regex) в C#?

Задан 2 месяца назад1.3к просмотров3 ответа
8

Нужно проверить, что введённая строка — это корректный email, а из другого текста вытащить все числа. Знаю, что для этого есть регулярные выражения, но не понимаю, с какого класса начать в C# и как написать сам шаблон. Подскажите базовые примеры с Regex.

3 ответа

17
✓ Принятый ответ — помог автору

Всё живёт в пространстве имён System.Text.RegularExpressions, основной класс — Regex.

Проверка по шаблонуRegex.IsMatch (возвращает bool):

using System.Text.RegularExpressions;

string email = "[email protected]";
bool ok = Regex.IsMatch(email, @"^[\w.\-]+@[\w\-]+\.[a-z]{2,}$");
Console.WriteLine(ok); // True

Обратите внимание на @"..." перед строкой — это дословная строка, чтобы обратные слеши не нужно было экранировать.

Найти первое совпадениеRegex.Match:

Match m = Regex.Match("Заказ №42 на сумму 1500", @"\d+");
if (m.Success)
    Console.WriteLine(m.Value); // "42"

Найти все совпаденияRegex.Matches:

foreach (Match num in Regex.Matches("a1 b22 c333", @"\d+"))
    Console.WriteLine(num.Value); // 1, 22, 333

ЗаменаRegex.Replace:

string clean = Regex.Replace("тел: 8-900-123", @"\D", ""); // "8900123"

Шпаргалка по шаблонам: \d — цифра, \w — буква/цифра/_, \s — пробел, + — один и больше, * — ноль и больше, ^/$ — начало/конец строки.

Совет: если один и тот же шаблон используется часто, создайте new Regex(pattern) один раз и переиспользуйте — это быстрее, чем статические методы каждый раз.

6

Добавлю про группы — это то, ради чего часто и берут regex: вытащить части совпадения.

var m = Regex.Match("2026-06-18", @"(\d{4})-(\d{2})-(\d{2})");
if (m.Success)
{
    string year  = m.Groups[1].Value; // "2026"
    string month = m.Groups[2].Value; // "06"
    string day   = m.Groups[3].Value; // "18"
}

Можно давать группам имена для читаемости:

var m2 = Regex.Match("18.06.2026", @"(?<d>\d{2})\.(?<m>\d{2})\.(?<y>\d{4})");
Console.WriteLine(m2.Groups["y"].Value); // "2026"
2

Маленькое предупреждение для новичков: не пытайтесь валидировать email «идеальным» regex из интернета на 200 символов — это перебор. Для учебных задач достаточно простого шаблона из принятого ответа, а в реальном проекте проверку email лучше доверить System.Net.Mail.MailAddress или встроенным аннотациям [EmailAddress].

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект