Retos de Expresiones Regulares

Iniciado por ~ Yoya ~, 3 Octubre 2010, 17:02 PM

0 Miembros y 1 Visitante están viendo este tema.

~ Yoya ~

Haber quien plantea un nuevo reto xD :-(
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

Psyke1

Cita de: ~ Yoya ~ en 30 Octubre 2010, 20:22 PM
Haber quien plantea un nuevo reto xD :-(
No llores gatito :-* :laugh: :laugh: :laugh:


Reto #7
Sacar los números con decimales, puntos y negativos de un texto haciendo las validaciones necesareas.

Ej:
Citarhola 3455345 sdfsdf 345435,3454 sdfsdf j ksjdh skdjfh 1.233.555,34534 asdasd as 344.34 qweqwe 23,324.324 qweqwe -234324324

Los validos serian :
Citar3455345
345435,3454
1.233.555,34534
-234324324

A por ello! :D

DoEvents! :P

~ Yoya ~

Código (php) [Seleccionar]
<?php

$txt 
"hola 3455345 sdfsdf 345435,3454 sdfsdf j ksjdh skdjfh 1.233.555,34534 asdasd as 344.34 qweqwe 23,324.324 qweqwe -234324324";
preg_match_all("/([\d\-\,\.]+)/"$txt$capturaPREG_SET_ORDER);
   foreach (
$captura as $salida):
      echo 
$salida[1];
      echo 
"<br>";
   endforeach;

?>


3455345
345435,3454
1.233.555,34534
344.34
23,324.324
-234324324




Reto #8

Eliminar los espacios en blancos que estén en medio, las condiciones son que a la derecha debe estar una letra y a la izquierda un numero.

Cadena:
hola 3455345 sdfsdf 345435,3454 sdfsdf j ksjdh skdjfh 1.233.555,34534 asdasd as 344.34 qweqwe 23,324.324 qweqwe -234324324
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

Psyke1

@Yoya
No vale esa RegExp para el Reto 7.
Solo puede captar números validos, fijate bien en el ejemlpo que puse ;)
Segun tu RegExp estos serian numeros validos (y no lo son):
Citar344.34
23,324.324
El punto en este caso no se usara como decimal, sino para separar miles, asi:
Citar76.234.345.456.788.999.000,345345345

Jeje, ahora no es tan facil  :-*

DoEvents! :P

Psyke1

@Reto 7
(?![.,])-?(\d{1,3}\.|\d+)(\d{3}\.?\d{3})*(\,?\d+)?
Aqui dejo la mia, corregidme si veis algun fallo ;) , la he hecho corriendo que me tengo que marchar... :¬¬

DoEvents! :P

~ Yoya ~

Bueno aunque se vea fácil es muy complicado cuando intentas crear una expresión regular para validar o capturar cualquier texto, en este caso es un texto fijo y lo pude hacer.

Código (perl) [Seleccionar]
#!/usr/bin/perl
$text = 'hola 3455345 sdfsdf 345435,3454 sdfsdf j ksjdh skdjfh 1.233.555,34534 asdasd as 344.34 qweqwe 23,324.324 qweqwe -234324324';

while($text =~ m/(?:\s)([\d\.]+\,\d+(?=\s)|\d+\,\d+(?=\s)|\d+(?=\s)|\-\d+)/g)
{
   print $1, "\n";
}


Salida:
3455345
345435,3454
1.233.555,34534
-234324324



La regexp que creaste no filtra correctamente, debes tratar de crear una regexp mas estricta de modo que si x parte no cumple con x condición, la regexp se pare y no devuelva ninguna referencia. Trata de hacer una Regexp que devuelva una sola Referencia mejor y no 3.



Se podría hacer fácilmente una regexp que valide cualquier texto, a mi se me ocurriría dividir primero el texto y luego validarlo pero es mejor hacerlo todo en una sola Regexp y que devuelva una sola referencia xD. Mas tarde miro como me hago para crear una sola regexp o que alguno muestre su regexp para validar cualquier texto xD.

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

Psyke1

Ook Yoya, gracias por la explicación, me pongo con el Reto 8 mañana... :P

DoEvents! :P

~ Yoya ~

Buenas, estaba pensando que podemos hacer un benchmark de las Regexp para ver cual es el patron mas optimizado para cada problema.

Saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

cyberserver

Buenos días.

Estos trabajando con este texto:


Citar
FN Thomson Reuters Web of Knowledge
VR 1.0
PT S
AU O'Flynn, B
   Torre, G
   Fernstrom, M
   Winkler, T
   Lynch, A
   Barton, J
   Angove, P
   O'Mathuna, SC
AF O'Flynn, B.
   Torre, G.
   Fernstrom, M.
   Winkler, T.
   Lynch, A.
   Barton, J.
   Angove, P.
   O'Mathuna, S. C.
BE Leonhardt, S
   Falck, T
   Mahonen, P
TI Celeritas - A wearable sensor system for interactive digital dance
   theatre
SO 4th International Workshop on Wearable and Implantable Body Sensor
   Networks (BSN 2007)

Y estoy interesado en separar el texto de todas las etiqueta FN,VR........TI,SO por partes.

Para poder tener la parte de la etiqueta correspondiente por ejemplo
Etiqueta: SO
Contenido: 4th International Workshop on Wearable and Implantable Body Sensor
   Networks (BSN 2007)

Creen ustedes que seria buena idea usar expresiones regulares, y si fuera el caso cual me recomiendas, estaba pensando quiza en buscar las primeras letras de un renglón que fueran mallusculas.


Caray a quien engaño siempre me han costado mcuho trabajo las expresiones, alguien me puede ayudar a solucionar.






cyberserver

#19
Ya tengo para seleccionar solo las etiquetas:


/^([A-Z]{1}+[A-Z|0-9]{1}+\s)/gm


Pero cómo puedo hacer para seleccionar lo demas.