Patrones de Expresión Regular

Nociones Basicas

Regular Expressions, Regex.  Se define como un conjunto de caracteres que al ser comparadas a una cadena verifican que cumpla ciertos requerimientos de formato.

Tambien se utilizan para extraer porciones de texto y/o actualizar texto cambiando caracteres o su formato en si­.

Aca tenemos algunos caracteres y formas utilizados en los regex

^ para coincidir con el inicio de la cadena
$ para coincidir con el final de la cadena
\Z para coincidir con el ultimo caracter o salto de li­nea
\z para coincidir con el ultimo caracter de la fila
* cero o mas repeticiones
+ una o mas repeticiones
a{#min, #max} numero de apariciones del caracter ‘a’ de #min a #max. Si no se especifica #max seri­a como mi­nimo #min caracteres ‘a’.
? caracter opcional (cero o uno de tal caracter)
. caracter opcional (uno o uno de tal caracter)
[a-z,A-Z] caracteres dentro de un rango determinado, para este ejemplo de ‘a’ a ‘z’ y de ‘A’ a ‘Z’
\d cualquier numero

Nota: Los ejemplos a continuacion se prueban en LINQPad. A opinion personal, lo recomiendo para este tipo de pruebas que crear todo un pequeño proyecto en Visual Studio.

Para caracteres especiales a ser utilizados, usar el ‘\’ y el caracter deseado.

Hay que recordar que las expresiones son Case-Sensitive. Pasemos a ver algunas clases de System.Text.RegularExpressions

Clase Regex

Es una clase que contiene la expresion regular de manera inmutable. Presenta tambien metodos estaticos para su uso. Podemos usar el metodo IsMatch(input, regexPattern) para validar coincidencias de la cadena de entrada con el patron de expresion regular:

   1: void Main()

   2: {

   3:     /* Forma 1*/    

   4:     string.Format("{0} Coincide con el patron de expresion regular", Regex.IsMatch(@"b",@"^[a-zA-Z]*$")?"Si":"No").Dump();

   5:     

   6:     /* Forma 2*/

   7:     Regex rgx = new Regex(@"^\d{1,}\.?\d{0,4}$");

   8:     string.Format("{0} Coincide con el patron de expresion regular", rgx.IsMatch(@"12.012")?"Si":"No").Dump();

   9: }

Clase Match

Es una clase que hace una busqueda de coincidencias. Tambien ayuda a extraer las mismas.

   1: void Main()

   2: {    

   3:     Match m = Regex.Match(@"abc123 cde212 123", @"[a-z]+(\d*)");

   4:     if(m.Success){

   5:         int i=0, n = m.Length;

   6:         "Solo los que coinciden".Dump();

   7:         while(i < n){

   8:             m.Value.Dump();

   9:             m = m.NextMatch();        

  10:             i++;

  11:         }

  12:     }

  13: }

Ahora tenemos un ejemplo para reemplazar contenido con ayuda de Regex.

   1: void Main()

   2: {    

   3:     string pattern = @"\d+"; //los numeros, en una o mas repeticiones

   4:     string input = @"a123b0c999d"; //dentro de esta entrada

   5:     string output = Regex.Replace(input, pattern,"-"); //seran reemplazados por guiones

   6:     output.Dump();

   7: }

Y a todo esto, vayamos ahora por eBiblio, el proyecto de sistema de biblioteca en CIDESOFT. El problema es el siguiente: Tenemos los registros de autores, los cuales estan en una sola columna con un patron de <apellidos>, <nombres> para cada autor, a su vez si un libro tiene mas autores, son separados por el caracter ‘/’ teniendo asi­:  <apeAutor1>, <nomAutor1> / <apeAutor2>, <nomAutor2> / … / <apeAutorN>, <nomAutorN>

Con la ayuda de regex, podemos capturar los campos que queremos y asi­ agruparlos en una lista de autores. El siguiente procedimiento realiza la prueba para los dos tipos de caso, un autor y varios autores. Nos ayudaremos tambien del metodo Split de Regex para facilitar las cosas. A continuacion un pantallazo de LINQPad sobre como se ha testeado el codigo que nos soluciona el problema planteado:

image

Por ultimo, recomiendo las siguientes referencias y herramientas para el uso de patrones de expresion regular:

  • RegexLib .- Una libreri­a con una infinidad de patrones de expresion regular, los cuales son aportados por los mismos usuarios de esta buena web (el link hace referencia al regex del codigo anterior).
  • Expresso .- Gran herramienta gratuita para crear, probar y a la vez ver que significa cada regex que desarrollemos.
  • MSDN Library .- y bueno, siempre encontraremos de todo un poco alli­ ^^.

Esta ha sido una pequeña introduccion a Patrones de Expresion Regular. Espero haya sido de utilidad.

Parte del texto escrito por el autor forma parte de un resumen personal de estudio para el examen 70-536 aplicable al MCTS.

Post.End();

About Jara Gabriel

Integrante Colaborador del CIDESOFT. Microsoft Certified Tecchnology Specialist
This entry was posted in CSharp, Cidesoft, Development, Productivity and tagged , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>