Foro de elhacker.net

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
  1. #!/usr/bin/python
  2. import re
  3. while True:
  4.  palabra = raw_input("Introduce tu expresion para ver si coincide:\n");
  5.  if re.match("http://(.+)\net", palabra):
  6.     print "Cierto"
  7.  else:
  8.     print "Falso"
  9.  

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í:
Código:
if re.match("http://(.+)\.net", palabra):

Código:
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
+ es un cuantificador y busca 1 o más elementos.

Prueba así:
Código:
if re.match("http://(.+)\.net", palabra):

Código:
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
  1. #!/usr/bin/python
  2. import re
  3. while True:
  4.  palabra = raw_input("Introduce tu expresion para ver si coincide:\n");
  5.  if re.match("http://\w+?\.?\w+\.?[net|com|org]", palabra):
  6.     print "Cierto"
  7.  else:
  8.     print "Falso"
  9.  
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
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
  1. #!/usr/bin/python
  2. import re
  3. while True:
  4.  palabra = raw_input("Introduce tu expresion para ver si coincide:\n");
  5.  if re.match("http://\w+?\.?\w+\.?[net|com|org]", palabra):
  6.     print "Cierto"
  7.  else:
  8.     print "Falso"
  9.  
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-
Acepto 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...