Expressões regulares em C# com exemplos: da teoria à prática
\n\nExpressões regulares (regex) são uma ferramenta poderosa para buscar, extrair e substituir texto com base em padrões. Em C# (.NET), o trabalho com regex é implementado através do namespace System.Text.RegularExpressions e da classe Regex. Neste artigo, abordaremos os principais recursos com exemplos reais: desde a busca simples até a validação de email e telefone.
1. Fundamentos: a classe Regex e seus métodos
\n\nA classe principal para trabalhar é Regex. Ela fornece métodos estáticos e de instância. Aqui estão os principais:
- \n
IsMatch— verifica se a string contém uma correspondência com o padrão. \nMatch— encontra a primeira correspondência. \nMatches— encontra todas as correspondências. \nReplace— substitui as correspondências pela string especificada. \nSplit— divide a string com base no padrão. \n
Exemplo 1. Verificação simples
\nusing System;\nusing System.Text.RegularExpressions;\n\nclass Program\n{\n static void Main()\n {\n string text = "Olá, meu número: 123-456-7890";\n string pattern = @"\\d{3}-\\d{3}-\\d{4}";\n\n if (Regex.IsMatch(text, pattern))\n {\n Console.WriteLine("Número encontrado!");\n }\n }\n}\n\n\nNeste exemplo, \\d{3} significa "exatamente três dígitos". A barra invertida é escapada usando @ (string verbatim).
2. Grupos de captura e extração de dados
\n\nGrupos de captura permitem extrair partes da correspondência. Eles são definidos por parênteses (). Cada grupo recebe um número ordinal (começando em 1).
Exemplo 2. Extraindo nome de usuário e domínio de um email
\nstring email = "user@example.com";\nstring pattern = @"^(\\w+)@(\\w+\\.\\w+)$";\n\nMatch match = Regex.Match(email, pattern);\n\nif (match.Success)\n{\n Console.WriteLine($"Usuário: {match.Groups[1].Value}"); // user\n Console.WriteLine($"Domínio: {match.Groups[2].Value}"); // example.com\n}\n\n\nAqui, (\\w+) captura um ou mais caracteres alfanuméricos. ^ e $ são âncoras de início e fim da string.
Exemplo 3. Analisando uma URL
\nstring url = "https://pythonlib.ru/page?id=42";\nstring pattern = @"^(https?)://([^/]+)(/.*)?$";\n\nMatch m = Regex.Match(url, pattern);\nif (m.Success)\n{\n Console.WriteLine($"Protocolo: {m.Groups[1].Value}"); // https\n Console.WriteLine($"Domínio: {m.Groups[2].Value}"); // pythonlib.ru\n Console.WriteLine($"Caminho: {m.Groups[3].Value}"); // /page?id=42\n}\n\n\n3. Substituição e remoção de texto
\n\nO método Replace permite substituir trechos encontrados. É possível usar referências reversas como $1, $2 para inserir grupos.
Exemplo 4. Formatando número de telefone
\nstring raw = "89161234567";\nstring pattern = @"(\\d{1})(\\d{3})(\\d{3})(\\d{2})(\\d{2})";\nstring replacement = "+7 ($2) $3-$4-$5";\n\nstring formatted = Regex.Replace(raw, pattern, replacement);\nConsole.WriteLine(formatted); // +7 (916) 123-45-67\n\n\nExemplo 5. Removendo espaços extras
\nstring text = "Este texto tem espaços extras.";\nstring cleaned = Regex.Replace(text, @"\\s+", " ");\nConsole.WriteLine(cleaned); // "Este texto tem espaços extras."\n\n\n\\s+ — um ou mais caracteres de espaço em branco. Substituímos por um espaço simples.
4. Casos reais: validação de email e telefone
\n\nNa prática, regex é mais frequentemente usado para validar entrada do usuário. Vamos dar dois exemplos típicos.
\n\nValidação de email (simplificada)
\npublic static bool IsValidEmail(string email)\n{\n if (string.IsNullOrWhiteSpace(email))\n return false;\