Expresiones regulares en C#: una herramienta poderosa para trabajar con texto
Las expresiones regulares (regex) son una herramienta indispensable para buscar, extraer y reemplazar datos de texto según un patrón determinado. En C# (.NET), el trabajo con expresiones regulares se implementa a través del potente espacio de nombres System.Text.RegularExpressions y la clase Regex. En este artículo, analizaremos las principales capacidades de las expresiones regulares en C# con ejemplos prácticos que le ayudarán a automatizar el procesamiento de cadenas.
Fundamentos de la clase Regex en C#
La clase principal para trabajar con expresiones regulares en C# es System.Text.RegularExpressions.Regex. Proporciona métodos estáticos y de instancia para realizar operaciones de búsqueda, reemplazo y división de cadenas.
Creación de un objeto Regex
Puede crear una instancia de la clase Regex pasando al constructor un patrón y, opcionalmente, banderas:
using System.Text.RegularExpressions;
// Creación simpleRegex regex = new Regex(@"\\d+");
// Con banderas (por ejemplo, ignorar mayúsculas/minúsculas)Regex regexIgnoreCase = new Regex(@"hello", RegexOptions.IgnoreCase);Importante: En C#, se recomienda usar cadenas literales (con el prefijo @) para escribir patrones. Esto evita tener que escapar las barras invertidas, haciendo el código más legible.
Métodos estáticos de Regex
Para operaciones únicas, es más conveniente usar métodos estáticos que no requieren crear una instancia de la clase:
bool isMatch = Regex.IsMatch("¡Hola, mundo!", @"mundo");Console.WriteLine(isMatch); // True
string result = Regex.Replace("123abc456", @"\\d+", "X");Console.WriteLine(result); // XabcXMétodos principales para trabajar con texto
La clase Regex proporciona cuatro métodos clave: IsMatch, Match, Matches y Split. Veamos cada uno con ejemplos.
Método IsMatch — verificación de coincidencia
El método IsMatch devuelve un bool que indica si se encontró al menos una coincidencia con el patrón en la cadena.
string email = "user@example.com";string pattern = @"^[\\w\\.-]+@[\\w\\.-]+\\.\\w{2,4}$";
if (Regex.IsMatch(email, pattern)){ Console.WriteLine("Email correcto");}else{ Console.WriteLine("Email incorrecto");}Este ejemplo verifica si la cadena coincide con un patrón simple de dirección de email.
Métodos Match y Matches — búsqueda de coincidencias
Match devuelve la primera coincidencia, mientras que Matches devuelve una colección de todas las coincidencias como un objeto MatchCollection.
string text = "Precio: 1500 rub. Descuento: 200 rub. Total: 1300 rub.";string pattern = @"\\d+";
// Primera coincidenciaMatch firstMatch = Regex.Match(text, pattern);Console.WriteLine($"Primer número: {firstMatch.Value}"); // 1500
// Todas las coincidenciasMatchCollection allMatches = Regex.Matches(text, pattern);Console.WriteLine("Todos los números:");foreach (Match match in allMatches){ Console.WriteLine($" - {match.Value}"); // 1500, 200, 1300}El objeto Match contiene no solo el valor (Value), sino también la posición en la cadena (Index) y la longitud (Length).
Método Split — división de cadenas
Regex.Split divide una cadena en una matriz de subcadenas según un patrón especificado. Es análogo a String.Split, pero con soporte para expresiones regulares.
string data = "Iván;25;Moscú;programador";string pattern = @";";
string[] parts = Regex.Split(data, pattern);foreach (string part in parts){ Console.WriteLine(part);}// Salida:// Iván// 25// Moscú// programadorAgrupación y captura de datos
Una de las características más potentes