Как использовать регулярные выражения (Regex) в C#?
Нужно проверить, что введённая строка — это корректный email, а из другого текста вытащить все числа. Знаю, что для этого есть регулярные выражения, но не понимаю, с какого класса начать в C# и как написать сам шаблон. Подскажите базовые примеры с Regex.
3 ответа
Всё живёт в пространстве имён 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) один раз и переиспользуйте — это быстрее, чем статические методы каждый раз.
Добавлю про группы — это то, ради чего часто и берут 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"
Маленькое предупреждение для новичков: не пытайтесь валидировать email «идеальным» regex из интернета на 200 символов — это перебор. Для учебных задач достаточно простого шаблона из принятого ответа, а в реальном проекте проверку email лучше доверить System.Net.Mail.MailAddress или встроенным аннотациям [EmailAddress].