Enero 9

2018

Hoy me ha pasado lo de siempre, una cosa que tenia que ser sencilla me ha complicado un poco el día. Necesitaba extraer de un texto todo lo que fueran letras, números o caracteres especiales no los necesitaba. Para ello decidí utilizar expresiones regulares ya que se supone que es mucho mas rápido y eficiente que un for e ir comprobando carácter por carácter.

Esto, que inicialmente era muy sencillo, al final me llevo mas de 2 horas y tener que buscar información en Internet. Y mira que curioso, toda la información es justamente para lo contrario, extraer solo números de una cadena de texto. Por ello decidí crear este bloc con la solución al problema.

El problema

Ya había utilizado expresiones regulares anteriormente para cosas parecidas, por lo que la expresión a utilizar la tenia, mas o menos, clara. El tema es que con Regex si que no estoy muy puesto, y no tenia claro como extraer el texto coincidente de la expresión. Solo había utilizado expresiones regulares para comprobar o validar una cadena de texto.

Y aquí es donde se me complico el tema. En otras ocasiones había comparado grupos dentro de la cadena, por ejemplo para validar un correo electrónico, pero nunca había necesitado quitar caracteres que no deseaba. Y al final se hizo la luz. Con Regex obtengo un grupo de caracteres por cada carácter coincidente con la expresión y solo tenemos que recorrer el array obtenido y concatenar todos los caracteres para construir nuestro resultado.

El CÓDIGO con la SOLUCIÓN

Como es un código muy pequeño, que es lo que se pretendía al utilizar expresiones regulares, y bastante claro, no creo que haga falta aclarar nada sobre el mismo, aquí tenéis lo justo y necesario para extraer todas las letras de una cadena de texto.

        /// <summary>
/// Solo admite letras. Se pueden agregar otros caracteres. Se usa Expresiones regulares.
/// </summary>
/// <param name="texto">Caracteres a comprobar</param>
/// <param name="adicionales">Otros caracteres a admitir. Para espacios en blanco agregar '\s' para numeros '\d'</param>
/// <returns>Solo las letras sin espacios en blanco (salvo que este en los adicionales)</returns>
public static string SoloLetras(string texto, string adicionales = "")
{
Regex comprueba = new Regex(@"[a-zA-ZñÑ" + adicionales + "]"); //definicion de los caracteres permitidos
MatchCollection matches = comprueba.Matches(texto);
string retorno = string.Empty;
if (matches.Count > 0)
{
foreach (Match item in matches)
{
retorno += item.Value;
}
}
return retorno;
}

Consideraciones

Como podéis observar he introducido una variable para poder enviar otro tipo de caracteres que necesitemos. Al igual que, si lo que necesitas es extraer todos los numero de una cadena de texto, seria muy fácil de modificar esta función. Pero para eso si que hay mucha documentación en Internet, pero básicamente podrías cambiar la expresión [a-zA-Z] por [\d] y así solo obtendrías todos los dígitos. Si ademas te interesan el punto y la coma, pues los agregas a la expresión.

DOCUMENTACIÓN

Comprobar expresiones regulares Interesantes expresiones regulares mas comunes

#CSHARP #utilidades

0 Comentarios

Escribir un comentario

6 x 0 =



Archivo