🧲Regex
Las expresiones regulares son una herramienta poderosa para la búsqueda y manipulación de cadenas, permitiendo definir patrones para realizar operaciones complejas de forma concisa y eficiente.
1. Literales
Un literal es una coincidencia exacta de un texto específico. Por ejemplo, si quieres encontrar la palabra "casa" en una cadena, usarías "casa" como tu expresión regular
using System.Text.RegularExpressions;
string texto = "La casa es grande.";
Match match = Regex.Match(texto, "casa");
if (match.Success) {
Console.WriteLine($"Se encontró: {match.Value}");
}
2. Caracteres Especiales
Algunos caracteres tienen significados especiales en las expresiones regulares. Aquí hay algunos ejemplos :
.
(punto): Coincide con cualquier carácter excepto una nueva línea.Ejemplo:
a.b
puede coincidir con "acb", "a b", pero no con "a\nb".
Match match = Regex.Match("acb", "a.b");
// Coincide con "acb"
\d
: Coincide con cualquier dígito numérico (0-9).Ejemplo:
\d\d
coincide con cualquier secuencia de dos dígitos, como "12".
Match match = Regex.Match("La habitación 12 está abierta", @"\d\d");
// Coincide con "12"
\w
: Coincide con cualquier carácter alfanumérico (letras, dígitos) o guion bajo (_).Ejemplo:
\w\w
puede coincidir con "ab", "1a", o "a_".
Match match = Regex.Match("ab1", @"\w\w");
// Coincide con "ab"
\s
: Coincide con cualquier espacio en blanco (espacio, tabulación, nueva línea).Ejemplo:
a\sb
coincide con "a b".
Match match = Regex.Match("a b", @"a\sb");
// Coincide con "a b"
3. Cuantificadores
Permiten especificar cuántas veces quieres que aparezca un elemento:
*
(cero o más veces)Ejemplo:
a*b
puede coincidir con "b", "ab", "aab", "aaab", etc.
Match match = Regex.Match("aaab", "a*b");
// Coincide con "aaab"
+
(una o más veces)Ejemplo:
a+b
coincide con "ab", "aab", "aaab", pero no con "b".
Match match = Regex.Match("aaab", "a+b");
// Coincide con "aaab"
?
(cero o una vez)Ejemplo:
a?b
puede coincidir con "b" o "ab".
Match match = Regex.Match("ab", "a?b");
// Coincide con "ab"
{n}
(n veces exactas)Ejemplo:
a{2}b
coincide con "aab".
Match match = Regex.Match("aab", "a{2}b");
// Coincide con "aab"
Por supuesto, vamos a profundizar en cada uno de los conceptos básicos de regex con ejemplos más detallados y cómo aplicarlos en C#.
1. Literales
Un literal es una coincidencia exacta de un texto específico. Por ejemplo, si quieres encontrar la palabra "casa" en una cadena, usarías "casa" como tu expresión regular.
Ejemplo en C#:
using System.Text.RegularExpressions;
string texto = "La casa es grande.";
Match match = Regex.Match(texto, "casa");
if (match.Success) {
Console.WriteLine($"Se encontró: {match.Value}");
}
2. Caracteres Especiales
Algunos caracteres tienen significados especiales en las expresiones regulares. Aquí hay algunos ejemplos comunes:
.
(punto): Coincide con cualquier carácter excepto una nueva línea.Ejemplo:
a.b
puede coincidir con "acb", "a b", pero no con "a\nb".
Match match = Regex.Match("acb", "a.b");
// Coincide con "acb"
\d
: Coincide con cualquier dígito numérico (0-9).Ejemplo:
\d\d
coincide con cualquier secuencia de dos dígitos, como "12".
Match match = Regex.Match("La habitación 12 está abierta", @"\d\d");
// Coincide con "12"
\w
: Coincide con cualquier carácter alfanumérico (letras, dígitos) o guion bajo (_).Ejemplo:
\w\w
puede coincidir con "ab", "1a", o "a_".
Match match = Regex.Match("ab1", @"\w\w");
// Coincide con "ab"
\s
: Coincide con cualquier espacio en blanco (espacio, tabulación, nueva línea).Ejemplo:
a\sb
coincide con "a b".
Match match = Regex.Match("a b", @"a\sb");
// Coincide con "a b"
3. Cuantificadores
Permiten especificar cuántas veces quieres que aparezca un elemento:
*
(cero o más veces)Ejemplo:
a*b
puede coincidir con "b", "ab", "aab", "aaab", etc.
Match match = Regex.Match("aaab", "a*b");
// Coincide con "aaab"
+
(una o más veces)Ejemplo:
a+b
coincide con "ab", "aab", "aaab", pero no con "b".
Match match = Regex.Match("aaab", "a+b");
// Coincide con "aaab"
?
(cero o una vez)Ejemplo:
a?b
puede coincidir con "b" o "ab".
Match match = Regex.Match("ab", "a?b");
// Coincide con "ab"
{n}
(n veces exactas)Ejemplo:
a{2}b
coincide con "aab".
Match match = Regex.Match("aab", "a{2}b");
// Coincide con "aab"
4. Clases de Caracteres
Permiten definir un conjunto de caracteres que pueden coincidir.
[abc]
: Coincide con 'a', 'b', o 'c'.Ejemplo:
a[bc]d
puede coincidir con "abd" o "acd".
Match match = Regex.Match("acd", "a[bc]d");
// Coincide con "acd"
5. Anclas
Especifica una posición en el texto en lugar de un carácter.
^
(inicio de la cadena):^a
coincide con "a" al principio de la cadena.$
(final de la cadena):a$
coincide con "a" al final de la cadena.
Match matchInicio = Regex.Match("abc", "^a");
// Coincide con "a" al inicio
Match matchFinal = Regex.Match("cba", "a$");
// Coincide con "a" al final
Puedes usar expresiones regulares en C# sin necesariamente trabajar con la clase Match
si tu objetivo es simplemente verificar si hay una coincidencia. En lugar de Match
, puedes usar el método Regex.IsMatch
, que devuelve un valor booleano (true
o false
) indicando si el patrón de expresión regular se encuentra dentro de la cadena dada.
6.Clases de Caracteres Personalizadas
Las clases de caracteres personalizadas te permiten definir un conjunto específico de caracteres que desees que coincidan en tu expresión regular. Las defines usando corchetes []
, y puedes incluir rangos de caracteres.
[a-zA-Z]
: Coincide con cualquier letra mayúscula o minúscula. Aquí,a-z
abarca todas las letras minúsculas yA-Z
todas las mayúsculas.[abc]
: Coincide con 'a', 'b', o 'c'. Es un ejemplo de una clase de caracteres que no usa rangos.
Si quieres que coincida un patrón específico de caracteres de esta clase un número determinado de veces, puedes usar cuantificadores.
[a-zA-Z]{2}
: Coincide con cualquier dos letras seguidas, ya sean mayúsculas o minúsculas.
Aquí tienes un ejemplo en C# utilizando una clase de caracteres personalizada:
using System.Text.RegularExpressions;
string texto = "ab1";
bool contieneDosLetras = Regex.IsMatch(texto, @"[a-zA-Z]{2}");
if (contieneDosLetras) {
Console.WriteLine("La cadena contiene dos letras consecutivas.");
} else {
Console.WriteLine("La cadena no contiene dos letras consecutivas.");
}
Última actualización