Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

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

Что такое регулярные выражения

Регулярное выражение (regex) — шаблон для поиска, валидации, извлечения или замены текста. В .NET реализован в классе System.Text.RegularExpressions.Regex.

Основные конструкции

КонструкцияОписание
.Любой символ, кроме новой строки
\dЦифра ([0-9])
\DНе цифра
\wБуква/цифра/подчёркивание ([a-zA-Z0-9_])
\WНе \w
\sПробельный символ (пробел, таб, перенос)
\SНе пробельный
^Начало строки (или строки в Multiline)
$Конец строки (или строки в Multiline)
\bГраница слова
[]Класс символов: [aeiou], [a-z], [^0-9]
()Группа захвата
(?:)Незахватывающая группа
|ИЛИ (альтернация)
* + ? {n} {n,} {n,m}Квантификаторы: 0+, 1+, 0-1, ровно n, n+, от n до m
*? +? ??Ленивые (non-greedy) квантификаторы

Класс Regex — основные методы

МетодОписание
IsMatch(input)Есть ли совпадение (bool)
Match(input)Первое совпадение (Match объект)
Matches(input)Все совпадения (MatchCollection)
Replace(input, replacement)Замена всех совпадений
Split(input)Разделение строки по шаблону

Все методы имеют перегрузки с RegexOptions (IgnoreCase, Multiline, Compiled, ExplicitCapture, Singleline, IgnorePatternWhitespace).

Пример 1: слова, начинающиеся на 'S'

using System;
using System.Text.RegularExpressions;

string text = "A Thousand Splendid Suns";
string pattern = @"\bS\w*"; // граница слова, S, затем буквы

foreach (Match m in Regex.Matches(text, pattern))
    Console.WriteLine(m.Value); // Splendid, Suns

Пример 2: слова на 'm'...'e'

string text = "make maze and manage to measure it";
string pattern = @"\bm\w*e\b";

foreach (Match m in Regex.Matches(text, pattern))
    Console.WriteLine(m.Value); // make, maze, manage, measure

Пример 3: замена лишних пробелов

string input = "Hello    World";
string pattern = @"\s+"; // один или более пробелов
string result = Regex.Replace(input, pattern, " ");
Console.WriteLine(result); // "Hello World"

Группы и именованные группы

string pattern = @"(?\d{4})-(?\d{2})-(?\d{2})";
string input = "2024-01-15";

Match m = Regex.Match(input, pattern);
if (m.Success)
{
    Console.WriteLine(m.Groups["year"].Value);  // 2024
    Console.WriteLine(m.Groups["month"].Value); // 01
    Console.WriteLine(m.Groups["day"].Value);   // 15
}

Замена с обратными ссылками

string input = "John Smith";
string pattern = @"(\w+)\s+(\w+)";
string result = Regex.Replace(input, pattern, "$2, $1"); // "Smith, John"

RegexOptions

Статические методы vs экземпляр

// Статические — для разовых, паттерн компилируется каждый раз
bool b = Regex.IsMatch(input, pattern);

// Экземпляр — для повторного использования, кэширует скомпилированный паттерн
var regex = new Regex(pattern, RegexOptions.Compiled);
foreach (var line in lines)
    if (regex.IsMatch(line)) ...

Практические паттерны

ЗадачаПаттерн
Email (упрощ.)^[\w.-]+@[\w.-]+\.\w{2,}$
Телефон (RU)^(\+7|8)[\s-]?\(?\d{3}\)?[\s-]?\d{3}[\s-]?\d{2}[\s-]?\d{2}$
URL^https?://[\w.-]+\.\w{2,}(/.*)?$
IPv4^(\d{1,3}\.){3}\d{1,3}$ (с проверкой 0-255 сложнее)
Дата DD.MM.YYYY^\d{2}\.\d{2}\.\d{4}$
Только цифры^\d+$

Лучшие практики

Язык C

  1. Выражения, операторы и блоки в C#: подробное руководство с примерами
  2. Строки в C#: основы, операции и продвинутые техники
  3. Понимание выражений, операторов и блоков в Java
  4. Освоение строк в Java: создание, методы и лучшие практики
  5. Строковые представления в Java Enums: настройка toString() и лучшие практики
  6. Освоение Java Lambda-выражений: от основ к Stream API
  7. Функции строк в C++: strcpy, strcat, strlen, strcmp — практические примеры
  8. Строки в C просто: объявление, ввод, вывод и библиотечные функции
  9. Мастерство метода str.count() в Python: как подсчитывать символы и подстроки с примерами
  10. Класс String в Java: создание, манипуляции и основные методы