Expresiones regulares en C# con ejemplos para principiantes

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#: guía completa para principiantes

Las expresiones regulares (regular expressions, regex) son una herramienta poderosa para buscar, reemplazar y validar cadenas según un patrón determinado. En C# (.NET), el trabajo con expresiones regulares se implementa a través del espacio de nombres System.Text.RegularExpressions. Este artículo le ayudará a dominar los conceptos básicos: desde la creación de patrones simples hasta el uso de todas las capacidades de la clase Regex.



1. Conceptos básicos del trabajo con Regex en C#

Para empezar, incluya el espacio de nombres:

using System.Text.RegularExpressions;

La clase Regex proporciona métodos estáticos y de instancia. La forma más sencilla de verificar si una cadena contiene una subcadena según un patrón es el método IsMatch:

string text = "Hola, mi correo: test@example.com";string pattern = @"\\w+@\\w+\\.\\w+"; // patrón simple de correo

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

Análisis del patrón:

  • \\w+ — una o más letras, dígitos o guiones bajos
  • @ — el símbolo "arroba"
  • \\. — punto escapado (sin escape, el punto significa "cualquier carácter")

Para llamadas repetitivas, es mejor crear un objeto Regex para evitar la recompilación del patrón:

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


2. Búsqueda de todas las coincidencias: Match y MatchCollection

El método Match devuelve la primera coincidencia, mientras que Matches devuelve todas las coincidencias en una colección MatchCollection. Cada objeto Match contiene información sobre la subcadena encontrada, su posición y longitud.

Ejemplo: extraer todos los números de una cadena

string data = "En 2023 hubo 15 eventos, en 2024 — ya 23.";string numberPattern = @"\\d+"; // uno o más dígitos

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

foreach (Match match in matches){ Console.WriteLine($"Encontrado: {match.Value} en posición {match.Index}");}// Salida:// Encontrado: 2023 en posición 2// Encontrado: 15 en posición 20// Encontrado: 2024 en posición 34// Encontrado: 23 en posición 47

Trabajo con grupos (Group). Los grupos permiten extraer partes de una coincidencia. Por ejemplo, al buscar una fecha en formato "dd.mm.aaaa", se puede obtener por separado el día, el mes y el año:

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

Match match = Regex.Match(input, datePattern);if (match.Success){ Console.WriteLine($"Día: {match.Groups[1].Value}"); // 25 Console.WriteLine($"Mes: {match.Groups[2].Value}"); // 12 Console.WriteLine($"Año: {match.Groups[3].Value}"); // 2024}

Los grupos se numeran desde 1 (el grupo 0 es toda la coincidencia completa). Los grupos con nombre son más fáciles de leer:

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


3. Capacidades avanzadas: reemplazos y opciones

Reemplazo de texto con Regex.Replace. Permite no solo eliminar o reemplazar una subcadena, sino también usar grupos en la cadena de reemplazo:

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

// Cambiamos el 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

Opciones importantes (RegexOptions):

Blogs

Book Recommendations