Problema con expresiones regulares

Iniciado por Debci, 21 Agosto 2010, 22:05 PM

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

Debci

Hola a todos, hace un rato me ha dado el puntazo de hacerme un parser para una pagina web y he decidido hacerlo en Python, he leido la doc de las regexp con algunos ejemplos, pero no funciona como deberia, al menos eso me parece a mi:

Código (python) [Seleccionar]

#!/usr/bin/python
import re
while True:
  palabra = raw_input("Introduce tu expresion para ver si coincide:\n");
  if re.match("http://(.+)\net", palabra):
     print "Cierto"
  else:
     print "Falso"


Si en teoria introduzco http://www.google.net
Deberia devolverme cierto no?
Pero no es asi.
No tengo claro del todo que hace el + pero creo que concatena las dos cadenas, es como el divisor entre miembros, pero no estoy seguro.

Saludos

leogtz

+ es un cuantificador y busca 1 o más elementos.

Prueba así:

if re.match("http://(.+)\.net", palabra):


if re.match("http://(.*)\.net", palabra):

PD: No sé regexp con python, así que no esperes que funcione.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Debci

Cita de: Leo Gutiérrez. en 21 Agosto 2010, 22:54 PM
+ es un cuantificador y busca 1 o más elementos.

Prueba así:

if re.match("http://(.+)\.net", palabra):


if re.match("http://(.*)\.net", palabra):

PD: No sé regexp con python, así que no esperes que funcione.
Jaja pues funciona xD

Gracias men :)

Saludos

leogtz

Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

~ Yoya ~

Bueno, aunque leo dio una respuesta, ps detallo un poco mas.

Tu error esta aqui.
http://(.+)\net
Estas indicando que existe una nueva linea y por lo tanto siempre la expresión fallara...

Nose porque usas los paréntesis, ya que no capturas nada....
Código (python) [Seleccionar]
#!/usr/bin/python
import re
while True:
  palabra = raw_input("Introduce tu expresion para ver si coincide:\n");
  if re.match("http://\w+?\.?\w+\.?[net|com|org]", palabra):
     print "Cierto"
  else:
     print "Falso"

Acepto http://www.google.net, http://google.net, http://www.google.com, etc...
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.

leogtz

También se podría utilizar '$' si quieres limitar la cadena.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Debci

Cita de: ~ Yoya ~ en 22 Agosto 2010, 00:23 AM
Bueno, aunque leo dio una respuesta, ps detallo un poco mas.

Tu error esta aqui.
http://(.+)\net
Estas indicando que existe una nueva linea y por lo tanto siempre la expresión fallara...

Nose porque usas los paréntesis, ya que no capturas nada....
Código (python) [Seleccionar]
#!/usr/bin/python
import re
while True:
 palabra = raw_input("Introduce tu expresion para ver si coincide:\n");
 if re.match("http://\w+?\.?\w+\.?[net|com|org]", palabra):
    print "Cierto"
 else:
    print "Falso"

Acepto http://www.google.net, http://google.net, http://www.google.com, etc...
Pues no veo donde le indicaste la coma final y todo eso xD
Por cierto para que sirve el "?"?

Saludos

~ Yoya ~

No entiendo a que te refieres con la coma final...

el signo de interrogación ?, sirve para indicar que algo puede aparecer máximo una sola vez...
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.

Shell Root

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

~ Yoya ~

jajaja, las comas ya son otro tema...
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.