El poder de las expresiones regulares

Creo no conocer a ningún programador que no odie enfrentarse a las expresiones regulares, lo cierto es que tienen su complejidad, aunque si te habitúas a utilizarlas en más de una ocasión te pueden sacar de un apuro.

En nuestra aplicación detectamos un error procedente de un control muy utilizado en nuestros formularios, el caso es que eliminamos una propiedad pública que utilizábamos para su configuración, como era de esperar el “find usages”, nos decía que esta era utilizada por infinidad de formularios de la aplicación, aparecían unas 2000 referencias, después de eliminar varias recorde que en cierta ocasión había podido solucionar un problema similar utilizando expresiones regulares.

Tenia que eliminar de los formularios todas las líneas similares a

   1: ((System.ComponentModel.ISupportInitialize)(this.bPorcentaje7.Properties)).BeginInit();
   2: this.bPorcentaje7.Properties.MaxLength = 6;
   3: ((System.ComponentModel.ISupportInitialize)(this.bPorcentaje7.Properties)).EndInit();

Utilizando la herramienta find and replace del visual studio configure las siguientes expresiones:

image

   1: ^(.*){ComponentModel.ISupportInitialize}(.*){Porcentaje}(.*){Properties}(.*)
   2:  
   3: ^(.*){porcentaje}(.*){Properties}(.*){ MaxLength }(.*)

La primera expresión regular eliminaría dos líneas, la primera y la tercera correspondientes a BeginInit y EndInit y la segunda eliminaría la línea del maxlenght.

Su tradución seria así: Busca desde el principio de la línea una cadena que comience con cualquier carácter y que seguidamente tenga la cadena “ComponentModel.ISupportInitialize”, después cualquier cadena, seguido de la palabra “porcentaje” seguida de cualquier cadena, seguida de la palabra “properties” y que finalice con cualquier cadena.

Una vez escrito, solo bastaba reemplazar todas las cadenas, y voila, el trabajo de varias horas hecho en tan solo unos segundos.

Otro ejemplo interesante para sustituir un bloque determinado es este:

(.*)public void Copy(.*n)+?.*(})

Esta busca un metodo publico llamado copy y borra todo el contenido entre los dos corchetes, de esta forma podríamos eliminar un método completo.

La documentación de Visual Studio se encuentra disponible en http://msdn.microsoft.com/en-us/library/az24scfc(VS.80).aspx

Existen además varios generadores de expresiones regulares en la web y programas para ayudarnos a escribirlas.

Un comentario en “El poder de las expresiones regulares”

  1. Esto es una verdadera expresion regular!!

    ^(Index Value:)(d+,?d+.?d+)(Trade Time:)(w+sd+|d+:d+w+sw+)(Change:)(d+.?d+s+(d+.?d+%))(Prev Close:)(d+,?d+.?d+)(Open:)(d+,?d+.?d+|N/A)(Day’s Range:)(d+,?d+.?d+s-sd+,?d+.?d+|N/As-sN/A)(52wk Range:)(d+,?d+.?d+s-sd+,?d+.?d+)$

    xD tuve que inventarla para obtener informacion de una pagina web XHTML, para la cual el XMLDocument no me funciono porque daba error de XML no valido o_Ó y resultaron ser que los meta-tags no estaban cerrados……..

    jejeje, viendo el titulo y las primeras oraciones, me hicieron recordar como la pase para crear esa expresion regular, que obtenia de la informacion financiera de yahoo. Igual gracias a este post descubri que se puede usar expresiones para las busquedas (lo cual nunca me habia fijado xD)

    gracias. Y Saludos!!!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *