Para aquellos que deseen practicar con ER les dejo una herramienta educativa llamada Regex Coach (http://www.weitz.de/regex-coach) la cual permite construir expresiones y verificar su funcionamiento a partir del ingreso de cadenas a procesar. A los efectos de ganar tiempo les dejo a continuación una serie de tips para empezar a entender y probar la técnica:
Prueba el operador de repetición "*" (clausura de Klenee) y verifica para la siguiente expresión regular "(sc|g)o*(al|re)" cuales términos son válidos.
"ac*a" una a seguida por cualquier cantidad de c y al final otra a
Si se quiere operar con rangos de caracteres se deben utilizar los metacaracteres "[rango]", por ejemplo [0-9] solo dígitos numéricos [a-z] letras minúsculas entre a la z, [^0-9] ^es operador de negación, es decir que no sean dígitos numéricos.
Por ejemplo, una expresión regular que detecta si un término empeiza con letra mayúscula y continua con minúsculas "[A-Z][a-z]*". O un número de 3 dígitos "[0-9]{3} " o de 3 o más [0-9]{3,}
Cualquier cadena no vacía que contenga a, x e y "[axy]+"
Si queremos detectar si una cadena a su inicio empieza con una subcadena utilizamos "^Su color" o al final de la cadena "trono$".
Ahora es el momento de ver a pleno la potencia de las ER, el siguiente programa Perl lee el archivo de texto "aba.txt" de una sola vez, reemplaza los caracteres de fin de línea por espacios, normaliza a minúsculas todas las letras, elimina aquellos caracteres que no estén en el rango de la a y la z, extrae las palabras y finalmente muestra su frecuencia. casi todo hecho con expresiones regulares y en poquísimas líneas.
open(IN,"aba.txt");
@tmp=
$texto =~ tr/A-Z/z-z/;
$texto =~ s/[^a-z]/ /g;
(@arreglo)=split(/ /,$texto);
foreach $ele (@arreglo) {$aso{$ele}=$aso{$ele}+1}
foreach $ele (keys %aso) { print $ele." = ".$aso{$ele}."\n" }
No hay comentarios.:
Publicar un comentario