2011-01-15 14 views
7

estoy usando el siguiente código:Python expresiones regulares que no trabaja

downloadlink = re.findall("http://uploadir.com/u/(.*)\b", str(downloadhtml)) 

Sin embargo, cuando lo paso la siguiente cadena:

<input type="text" value="http://uploadir.com/u/bb41c5b3" /> 

Se encuentra nada, cuando estoy esperando que se encuentra : http://uploadir.com/u/bb41c5b3. ¿Qué estoy haciendo mal?

He probado la expresión regular usando http://gskinner.com/RegExr/ y parece ser correcta. ¿Me estoy perdiendo de algo?

Respuesta

6
>>> import re 
>>> html = '<input type="text" value="http://uploadir.com/u/bb41c5b3" />'; 
>>> regex = r'http://uploadir.com/u/([^"]+)' 
>>> link = re.findall(regex, html) 
>>> link 
['bb41c5b3'] 
>>> 
+0

¡Eres genial! ¡Muchas gracias! Debes esperar 5 minutos para marcar como fijo>.> – matthewgall

6

Obtener en el hábito de hacer todos los patrones de expresiones regulares con cadenas primas:

In [16]: re.findall("http://uploadir.com/u/(.*)\b", '<input type="text" value="http://uploadir.com/u/bb41c5b3" />') 
Out[16]: [] 

In [17]: re.findall(r"http://uploadir.com/u/(.*)\b", '<input type="text" value="http://uploadir.com/u/bb41c5b3" />') 
Out[17]: ['bb41c5b3'] 

La diferencia se debe a \b siendo interpreted differently:

In [18]: '\b' 
Out[18]: '\x08' 

In [19]: r'\b' 
Out[19]: '\\b' 

'\b' es un archivo ASCII de retroceso, mientras que r'\b' es una cuerda compuesta de los dos caracteres, una barra invertida y una b.

+0

Sus líneas son idénticas, tal vez haya un 'r' adicional en la primera línea? –

+0

@Mark E: Gracias. Corregido – unutbu

+0

Así que las cadenas sin formato son la clave ... ¡Muchas gracias por su ayuda! – matthewgall

Cuestiones relacionadas