Test Foro de elhacker.net SMF 2.1

Programación => Scripting => Mensaje iniciado por: Debci en 21 Agosto 2010, 22:05 PM

Título: Problema con expresiones regulares
Publicado por: Debci en 21 Agosto 2010, 22:05 PM
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
Título: Re: Problema con expresiones regulares
Publicado por: leogtz 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.
Título: Re: Problema con expresiones regulares
Publicado por: Debci en 21 Agosto 2010, 22:57 PM
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
Título: Re: Problema con expresiones regulares
Publicado por: leogtz en 21 Agosto 2010, 22:59 PM
De nada.
Título: Re: Problema con expresiones regulares
Publicado por: ~ 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...
Título: Re: Problema con expresiones regulares
Publicado por: leogtz en 22 Agosto 2010, 10:12 AM
También se podría utilizar '$' si quieres limitar la cadena.
Título: Re: Problema con expresiones regulares
Publicado por: Debci en 22 Agosto 2010, 11:04 AM
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
Título: Re: Problema con expresiones regulares
Publicado por: ~ Yoya ~ en 22 Agosto 2010, 16:41 PM
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...
Título: Re: Problema con expresiones regulares
Publicado por: Shell Root en 22 Agosto 2010, 19:36 PM
Supongo que se refiere a estó... -Sería un Pwned muy coño-
Cita de: ~ Yoya ~ en 22 Agosto 2010, 00:23 AMAcepto http://www.google.net, http://google.net, http://www.google.com, etc...
Título: Re: Problema con expresiones regulares
Publicado por: ~ Yoya ~ en 22 Agosto 2010, 23:13 PM
jajaja, las comas ya son otro tema...