Expressões regulares em C# com exemplos para iniciantes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Expressões regulares em C#: guia completo para iniciantes

Expressões regulares (regular expressions, regex) são uma ferramenta poderosa para buscar, substituir e validar strings com base em um padrão definido. Em C# (.NET), o trabalho com expressões regulares é implementado através do namespace System.Text.RegularExpressions. Este artigo ajudará você a dominar os fundamentos: desde a criação dos padrões mais simples até o uso de todos os recursos da classe Regex.



1. Fundamentos do trabalho com Regex em C#

Para começar, inclua o namespace:

using System.Text.RegularExpressions;

A classe Regex fornece métodos estáticos e de instância. A maneira mais simples de verificar se uma string contém uma substring que corresponde a um padrão é o método IsMatch:

string text = "Olá, meu email: test@example.com";string pattern = @"\\w+@\\w+\\.\\w+"; // padrão simples de email

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

Análise do padrão:

  • \\w+ — uma ou mais letras, dígitos ou sublinhados
  • @ — o caractere "arroba"
  • \\. — ponto escapado (sem escape, o ponto significa "qualquer caractere")

Para chamadas repetidas, é melhor criar um objeto Regex para evitar a recompilação do padrão:

Regex emailRegex = new Regex(@"\\w+@\\w+\\.\\w+");Console.WriteLine(emailRegex.IsMatch("admin@site.ru")); // True


2. Buscando todas as correspondências: Match e MatchCollection

O método Match retorna a primeira correspondência, enquanto Matches retorna todas as correspondências em uma coleção MatchCollection. Cada objeto Match contém informações sobre a substring encontrada, sua posição e comprimento.

Exemplo: extraindo todos os números de uma string

string data = "Em 2023 houve 15 eventos, em 2024 — já 23.";string numberPattern = @"\\d+"; // um ou mais dígitos

MatchCollection matches = Regex.Matches(data, numberPattern);

foreach (Match match in matches){ Console.WriteLine($"Encontrado: {match.Value} na posição {match.Index}");}// Saída:// Encontrado: 2023 na posição 3// Encontrado: 15 na posição 21// Encontrado: 2024 na posição 35// Encontrado: 23 na posição 48

Trabalhando com grupos (Group). Grupos permitem extrair partes de uma correspondência. Por exemplo, ao buscar uma data no formato "dd.mm.aaaa", é possível obter separadamente o dia, o mês e o ano:

string input = "Hoje é 25.12.2024";string datePattern = @"(\\d{2})\\.(\\d{2})\\.(\\d{4})";

Match match = Regex.Match(input, datePattern);if (match.Success){ Console.WriteLine($"Dia: {match.Groups[1].Value}"); // 25 Console.WriteLine($"Mês: {match.Groups[2].Value}"); // 12 Console.WriteLine($"Ano: {match.Groups[3].Value}"); // 2024}

Os grupos são numerados a partir de 1 (o grupo 0 é a correspondência inteira). Grupos nomeados são mais fáceis de ler:

string namedPattern = @"(?<day>\\d{2})\\.(?<month>\\d{2})\\.(?<year>\\d{4})";match = Regex.Match(input, namedPattern);Console.WriteLine(match.Groups["day"].Value);   // 25


3. Recursos avançados: substituições e opções

Substituição de texto com Regex.Replace. Permite não apenas remover ou substituir uma substring, mas também usar grupos na string de substituição:

string phone = "+7 (123) 456-78-90";// Remove tudo, exceto dígitosstring clean = Regex.Replace(phone, @"[^\\d]", "");Console.WriteLine(clean); // 71234567890

// Muda o formato: (123) 456-78-90 → 123-456-7890string formatted = Regex.Replace(phone, @"\\((\\d{3})\\)\\s*(\\d{3})-(\\d{2})-(\\d{2})", "$1-$2-$3$4");Console.WriteLine(formatted); // 123-456-7890

Opções importantes (RegexOptions):

Blogs

Book Recommendations