Expressões regulares em C#: fundamentos do trabalho com a classe Regex
Expressões regulares (regex) são uma ferramenta poderosa para buscar, extrair, substituir e validar strings com base em um padrão definido. Em C# (.NET), todo o trabalho com expressões regulares está concentrado no namespace System.Text.RegularExpressions e na classe central Regex. Neste artigo, vamos explorar os recursos básicos e avançados das expressões regulares em C# com exemplos práticos.
1. Classe Regex: métodos principais e criação de padrões
Para trabalhar com expressões regulares em C#, você precisa incluir o namespace:
using System.Text.RegularExpressions;A classe Regex fornece vários métodos essenciais:
- IsMatch — verifica se a string contém uma correspondência com o padrão.
- Match — retorna a primeira correspondência.
- Matches — retorna todas as correspondências.
- Replace — substitui as correspondências encontradas pela string especificada.
- Split — divide a string com base nas correspondências.
Exemplo simples de validação de email:
string email = "user@example.com";string pattern = @"^[\\w\\.-]+@[\\w\\.-]+\\.\\w+$";bool isValid = Regex.IsMatch(email, pattern);Console.WriteLine(isValid); // TrueObserve o símbolo @ antes da string — trata-se de uma string verbatim, que simplifica a escrita de barras invertidas (\\) nos padrões.
2. Busca e extração de dados: métodos Match e Matches
O método Match retorna um objeto Match, que contém informações sobre a primeira correspondência. Se não houver correspondências, a propriedade Success será false.
Exemplo de extração de número de telefone de um texto:
string text = "Ligue para +7 (123) 456-78-90 ou +7 (987) 654-32-10";string pattern = @"\\+7\\s?\\(\\d{3}\\)\\s?\\d{3}-\\d{2}-\\d{2}";MatchCollection matches = Regex.Matches(text, pattern);
foreach (Match match in matches){ Console.WriteLine(match.Value);}// Saída:// +7 (123) 456-78-90// +7 (987) 654-32-10O método Matches retorna uma coleção de todas as correspondências. Você também pode usar grupos de captura para extrair partes específicas:
string text = "ID: 12345, Preço: 999.99";string pattern = @"Preço:\\s*(\\d+\\.?\\d*)";Match match = Regex.Match(text, pattern);
if (match.Success){ string price = match.Groups[1].Value; Console.WriteLine($"Preço: {price}"); // Preço: 999.99}Os grupos de captura são indicados por parênteses () no padrão. O grupo zero corresponde a toda a correspondência, e os grupos de 1 a N são as substrings capturadas.
3. Substituição e divisão de strings: Replace e Split
O método Replace permite substituir correspondências de forma flexível. Suporta referências inversas ($1, $2, etc.) para inserir grupos capturados.
Exemplo de formatação de data de "YYYY-MM-DD" para "DD.MM.YYYY":
string date = "2025-03-15";string pattern = @"(\\d{4})-(\\d{2})-(\\d{2})";string replacement = "$3.$2.$1";string result = Regex.Replace(date, pattern, replacement);Console.WriteLine(result); // 15.03.2025O método Split divide a string com base nas correspondências do padrão. É útil para analisar CSV ou logs:
string data = "apple;banana;cherry;grape";string pattern = @";";string[] fruits = Regex.Split(data, pattern);foreach (var fruit in fruits){ Console.WriteLine(fruit);}// Saída:// apple// banana// cherry// grapeVocê também pode usar separadores mais complexos, como múltiplos espaços ou sinais de pontuação:
string text = "um dois,três;quatro";string[] parts = Regex.Split(