Expresiones regulares en C# con ejemplos: en la práctica

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Expresiones regulares en C# con ejemplos: en la práctica



Las expresiones regulares (regex) son una herramienta poderosa para buscar, validar y reemplazar texto según un patrón. En C# (.NET), el trabajo con ellas se implementa a través de la clase System.Text.RegularExpressions.Regex. En este artículo, analizaremos las principales capacidades con ejemplos reales: desde la validación simple de email hasta la extracción de datos de HTML. Todos los ejemplos están listos para copiar y usar en tus proyectos.



Fundamentos del trabajo con Regex en C#



La clase Regex proporciona tres métodos clave:

  • IsMatch — verifica si la cadena coincide con el patrón;
  • Match — encuentra la primera coincidencia;
  • Matches — encuentra todas las coincidencias.


Un ejemplo simple: verificar si una cadena contiene dígitos:



using System;using System.Text.RegularExpressions;

public class RegexExample{ public static void Main() { string text = "Mi número: 12345"; string pattern = @"\\d+"; // uno o más dígitos

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


Observa el @ antes de la cadena: es un literal de cadena textual (verbatim string literal) que desactiva el escape de la barra invertida. Sin él, tendrías que escribir "\\\\d+".



Validación de email y número de teléfono



Validación de email

La validación de email es una tarea clásica. Un patrón simple pero funcional:



public static bool IsValidEmail(string email){    string pattern = @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";    return Regex.IsMatch(email, pattern);}

// UsoConsole.WriteLine(IsValidEmail("user@example.com")); // TrueConsole.WriteLine(IsValidEmail("user@.com")); // False


Analicemos el patrón:

  • ^ — inicio de la cadena;
  • [a-zA-Z0-9._%+-]+ — parte local (letras, dígitos y caracteres especiales);
  • @ — símbolo "arroba";
  • [a-zA-Z0-9.-]+ — dominio;
  • \\. — punto (escapado);
  • [a-zA-Z]{2,} — zona del dominio (al menos 2 letras);
  • $ — final de la cadena.


Validación de número de teléfono

Ejemplo para el formato ruso (+7 XXX XXX-XX-XX):



public static bool IsValidRussianPhone(string phone){    string pattern = @"^\\+7\\d{3}\\d{3}-\\d{2}-\\d{2}$";    // O una variante más flexible:    // @"^\\+7[\\s-]?\\d{3}[\\s-]?\\d{3}[\\s-]?\\d{2}[\\s-]?\\d{2}$"    return Regex.IsMatch(phone, pattern);}


Extracción de datos de texto usando grupos de captura



Los grupos de captura (paréntesis ()) permiten extraer partes de una coincidencia. Por ejemplo, extraigamos todos los emails de un texto:



string text = "Contactos: support@site.com, admin@test.org, info@company.net";string pattern = @"([a-zA-Z0-9._%+-]+)@([a-zA-Z0-9.-]+)\\.([a-zA-Z]{2,})";

MatchCollection matches = Regex.Matches(text, pattern);foreach (Match match in matches){ Console.WriteLine($"Email completo: {match.Value}"); Console.WriteLine($"Parte local: {match.Groups[1].Value}"); Console.WriteLine($"Dominio: {match.Groups[2].Value}"); Console.WriteLine($"Zona: {match.Groups[3].Value}"); Console.WriteLine("---");}


Resultado:

Email completo: support@site.comParte local: supportDominio: siteZona: com---


Los grupos se numeran desde 1 (el grupo 0 es toda la coincidencia). Se les pueden asignar nombres:



string pattern = @"(?<user>[a-zA-Z0-9._%+-]+)@(?<domain>[a-zA-Z0-9.-]+)\\.(?<tld>[a-zA-Z]{2,})";// Acceso: match.Groups["user"].Value


Extracción de enlaces de HTML



string html = @"<a href='https://example.com'>Examp                

Blogs

Book Recommendations