Mie Ago 30, 2006 4:35 pm
|
 |
Katty
Perlero Nuevo

|
Registrado: 30 Ago 2006
Mensajes: 16
|
|
| Expresiones Regulares en Variables |
|
|
Hola a todos:
Mi nombre es Katty y tengo el siguiente problema:
Tengo algunos patrones (como ADEN o ADENO o CARCIN o CARCINO o OMA, y muchos mas) los cuales debo encontrar y separar entre si.
Por ejemplo: si se ingresa la palabra ADENOCARCINOMA, la salida deberia ser: ADENO CARCIN OMA.
Mis pregunta son:
1.- Se pueden asociar a una sola variable los patrones para luego comapar... Yo lo he intentado y no se genera el resultado esperado
2.- Como se pueden dar cuenta, cuando encuentra CARCIN tambien puede encontrar CARCINO, sin embargo la ultima O pertenece al otro patron OMA. Como puedo indicar que patron debe usar, o como le digo que en ciertas ocasiones devuelva el ultimo caracter sin que se confunda para otras entradas???
Espero que me puedan ayudar...
 |
|
|
|

Mie Ago 30, 2006 4:54 pm
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1390
Ubicación: México
|
|
|
|
|
Hola Katty:
Antes que nada bienvenida al foro
Hay un par de tutoriales en el sitio que hablan acerca de expresiones regulares y que te podrían ayudar para darte una base más sólida:
http://perlenespanol.baboonsoftware.com/tutoriales/
Ahora, sería bueno que pongas el código que estás usando en este momento, para que a partir de ahí te ayudemos a encontrar la solución.
Saludos |
|

Mie Ago 30, 2006 4:55 pm
|
 |
creating021
Vive para Perl en Español

|
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
|
|
|
|
|
Eso me suena a IA, creo que una red neuranal aría el tebajo, o hay un módulo en CPAN que hace algo que te puede ayudar:
La red neuronal tomaría un poco de tiempo en que aprendiera a separar, el otro módulo es muy paresido a prolog, pero creo que la solucion más rápida es separar cada informacion por dos puntos ":" y "sacarlo" usando split.
La forma mas exacta es usar un separador como ya dije (":") y con split haces el trabajo.
Te doy otra forma:
Puedes hacer un algoritmo que escane un grupo de plabras como "ADEN" y que saque la palabra que sigue (por medio de substr) y dependiendo de el caso (Si sigue "O" y de esta otra palabra) decidis que hacer.
Por ejemplo si tenes CARSINOMA, el algoritmo encuentra CARSIN y coje la O, luego la M y ya sabe que es CARSIN y OMA.
Espero que te ayude. |
|

Mie Ago 30, 2006 5:18 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4225
Ubicación: Valladolid, España
|
|
|
|
|
Con las expresiones regulares se pueden sacar fácilmente los patrones, siempre y cuando sepamos las reglas en las que se basan.
Un ejemplo para lo que propones: | Perl: | #!/usr/bin/perl
use warnings;
use strict;
my @patrones = (
'ADENO?(?!MA)' ,
'CARCINO?(?!MA)',
'OMA' ,
);
my $malestar = $ARGV[0] || 'ADENOCARCINOMA';
my @encontrado;
foreach my $patron ( @patrones ) {
if ( $malestar =~ / ($patron)/ ) {
push @encontrado, $ 1;
}
}
print join(" ", @encontrado);
print "\n"; |
Probando:
| Código: |
explorer@casa:~/> ./vade.pl ADENOCARCINO
ADENO CARCINO
explorer@casa:~/> ./vade.pl ADENOCARCIN
ADENO CARCIN
explorer@casa:~/> ./vade.pl ADENCARCINOMA
ADEN CARCIN OMA
explorer@casa:~/> ./vade.pl ADENOCARCINOMA
ADENO CARCIN OMA
explorer@casa:~/> ./vade.pl ADENOMA
ADEN OMA |
En este ejemplo hacemos uso de las expresiones regulares extendidas.
Lo que hace el programa es lo siguiente:- Creamos un array llamados @patrones en donde guardaremos las expresiones regulares que queremos extraer. En este caso, hemos supuesto que no importa el orden en que vamos a sacar la información.
- Luego leemos el $malestar desde la entrada estándar, como argumento, o le damos uno de prueba.
- Hacemos luego un bucle por todos los @patrones:
- Si dentro de $malestar hay un $patron, entonces, por efecto de los paréntesis, queda guardado en $1.
- y lo guardamos en @encontrado.
- Al final, pintamos el resultado.
El truco está en las expresiones regulares. La expresión CARCINO?(?!MA) quiere decir: "Busca la palabra CARCIN, opcionalmente seguida de O (O?), PERO que no esté seguida de MA ((?!MA))"
Naturalmente, la solución es sencilla porque has puesto un ejemplo sencillo. Como dice kidd, sería interesante ver todo el problema. |
|

Jue Ago 31, 2006 1:16 pm
|
 |
Katty
Perlero Nuevo

|
Registrado: 30 Ago 2006
Mensajes: 16
|
|
| Gracias |
|
|
Muchas gracias a todos lo que me han ayudado... |
|
Powered by phpBB © 2001, 2005 phpBB Group
|