• Publicidad

Expresión regular que capte palabras sueltas

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Expresión regular que capte palabras sueltas

Notapor otorices » 2010-11-08 11:18 @512

Muy buenas,

Me gustaría averiguar cómo debería plantear una expresión regular para que solo se analice palabras completas.

En principio la tengo planteada así:
/\b<expresión-regular>\b/

"<expresión.regular>" es una expresión regular cualquiera, esa parte no es importante.

La cuestión es que me funciona para todos los casos menos cuando aparecen caracteres con acento, que al parecer están dentro del subconjunto "\b".

Por ejemplo, si tenemos la palabra "Analítica" y queremos detectar las palabras "tica" que aparecen, si utilizo el modelo anterior no funcionará, ya que el carácter "í" precede la subcadena "tica", por lo tanto lo contará como si fuera una palabra suelta, sin serlo.

¿Como puedo plantearlo para tratar los casos en los que aparecen tildes?

¡Gracias!
otorices
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2009-04-16 13:59 @624

Publicidad

Re: Expresión regular que capte palabras sueltas

Notapor explorer » 2010-11-08 13:04 @586

Debes hacer que el programa funcione con el sistema de localización que tú vas a usar.

Por ejemplo. Supongamos que tenemos un fichero de datos así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
El resultado de la analítica es: 15% glucosa, 25% agua, 2% hierro, 0,01% carbón
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Como yo estoy en un sistema operativo trabajando con codificación es_ES.UTF-8, y el fichero lo he creado con un editor de textos adecuado, también estará codificado de esa manera (los dos caracteres con tildes están codificados con dos bytes cada uno).

Ahora bien, si no decimos nada a Perl, seguirá pensando que estamos trabajando con codificación iso-8859-1 (la de por defecto de Perl). Hay que indicarle que los ficheros de entrada están en una determinada codificación.

Como mi localización regional (UTF-8) coincide con la del fichero a leer, entonces solo tengo que indicar que en las operaciones de ficheros use la localización del sistema:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. use open ':locale';
  7.  
  8. open my $FILE, q[<], 'kk.txt';
  9.  
  10. while (<$FILE>) {
  11.     while (/(\w+)/g) {
  12.         print "[$1]\n";
  13.     }
  14. }
  15.  
  16. close $FILE;
  17.  
  18. __END__
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

La magia está en el use open ':locale';, que hará que Perl sepa que los ficheros que vamos a leer están en la misma codificación que la que indica el sistema. Y la salida (los print()), también.

Ya solo queda abrir el fichero, leerlo por líneas, y buscar las palabras:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
[El]
[resultado]
[de]
[la]
[analítica]
[es]
[15]
[glucosa]
[25]
[agua]
[2]
[hierro]
[0]
[01]
[carbón]
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Más información en perldoc open
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Expresión regular que capte palabras sueltas

Notapor otorices » 2010-11-08 13:18 @596

¿Sabes una cosa? Algún día tendré un problema que no sepas resolver. Ese día no dormirás. :lol:
¡Gracias por la respuesta! :D
otorices
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2009-04-16 13:59 @624

Re: Expresión regular que capte palabras sueltas

Notapor otorices » 2010-11-09 14:22 @640

Tengo un pequeño problema.

Resulta que si ejecuto el programa en Linux, tu solución me funciona perfectamente, pero en cambio, al ejecutarlo bajo Unix (o Windows) me sigue dando el mismo problema...

¿Alguna idea de cómo podría solucionarlo?

Muchas gracias.
otorices
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2009-04-16 13:59 @624

Re: Expresión regular que capte palabras sueltas

Notapor explorer » 2010-11-09 14:48 @658

¿Solución? Usar siempre Linux. Es una solución rápida, muy barata y fiable.

Otra solución más lenta, cara y menos fiable: averiguar las codificaciones de esos sistemas, y leer el enlace que te puse. Ahí está la solución. Por ejemplo,

use open ':encoding(utf8)';
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Expresión regular que capte palabras sueltas

Notapor otorices » 2010-11-10 10:51 @494

De acuerdo, gracias explorer.
otorices
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2009-04-16 13:59 @624


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 11 invitados