Expresiones regulares en C# con ejemplos: de la teoría a la práctica
\n\nLas expresiones regulares (regex) son una herramienta poderosa para buscar, extraer y reemplazar texto según un patrón. En C# (.NET), el trabajo con expresiones regulares se implementa a través del espacio de nombres System.Text.RegularExpressions y la clase Regex. En este artículo, analizaremos las principales funcionalidades con ejemplos reales: desde la búsqueda simple hasta la validación de email y teléfono.
1. Fundamentos: la clase Regex y sus métodos
\n\nLa clase principal para trabajar es Regex. Proporciona métodos estáticos y de instancia. Estos son los principales:
- \n
IsMatch— verifica si la cadena contiene una coincidencia con el patrón. \nMatch— encuentra la primera coincidencia. \nMatches— encuentra todas las coincidencias. \nReplace— reemplaza las coincidencias con la cadena especificada. \nSplit— divide la cadena según el patrón. \n
Ejemplo 1. Verificación simple
\nusing System;\nusing System.Text.RegularExpressions;\n\nclass Program\n{\n static void Main()\n {\n string text = "Hola, mi 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\nEn este ejemplo, \\d{3} significa «exactamente tres dígitos». La barra invertida se escapa con @ (cadena textual).
2. Grupos de captura y extracción de datos
\n\nLos grupos de captura permiten extraer partes de la coincidencia. Se definen con paréntesis (). Cada grupo recibe un número de orden (comenzando desde 1).
Ejemplo 2. Extracción de nombre y dominio de un 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($"Usuario: {match.Groups[1].Value}"); // user\n Console.WriteLine($"Dominio: {match.Groups[2].Value}"); // example.com\n}\n\n\nAquí, (\\w+) captura uno o más caracteres alfanuméricos. ^ y $ son los anclajes de inicio y fin de cadena.
Ejemplo 3. Análisis de 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($"Dominio: {m.Groups[2].Value}"); // pythonlib.ru\n Console.WriteLine($"Ruta: {m.Groups[3].Value}"); // /page?id=42\n}\n\n\n3. Reemplazo y eliminación de texto
\n\nEl método Replace permite reemplazar fragmentos encontrados. Se pueden usar referencias inversas como $1, $2 para insertar grupos.
Ejemplo 4. Formateo de número de teléfono
\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\nEjemplo 5. Eliminación de espacios adicionales
\nstring text = "Este texto tiene espacios adicionales.";\nstring cleaned = Regex.Replace(text, @"\\s+", " ");\nConsole.WriteLine(cleaned); // "Este texto tiene espacios adicionales."\n\n\n\\s+ — uno o más caracteres de espacio en blanco. Reemplazamos por un espacio simple.
4. Casos reales: validación de email y teléfono
\n\nEn la práctica, las expresiones regulares se usan más a menudo para verificar la entrada del usuario. A continuación, dos ejemplos típicos.
\n\nValidación de email (simplificada)
\npublic static bool IsValidEmail(string email)\n{\n if (string.IsNullOrWhiteSpace(email))\n return false;\