2011-01-15 17 views
7

Sto usando il seguente codice:Python regex non funziona

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

Tuttavia, quando lo passo la seguente stringa:

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

Si trova niente, quando mi aspetto per trovare : http://uploadir.com/u/bb41c5b3. Che cosa sto facendo di sbagliato?

Ho testato il regex utilizzando http://gskinner.com/RegExr/ e sembra essere corretto. Mi sto perdendo qualcosa qui?

risposta

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

Sei un genio! Grazie tante! Devi aspettare 5 minuti, per contrassegnare come fisso>.> – matthewgall

6

Prendi l'abitudine di fare tutti i modelli regex con le stringhe prime:

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 differenza è dovuta al \b essendo interpreted differently:

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

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

'\b' è un ASCII Backspace, mentre r'\b' è un stringa composta da due caratteri, una barra rovesciata e una b.

+0

Le tue linee sono identiche, forse c'è un 'r' in più nella prima riga? –

+0

@ Marco E: Grazie. Corretto. – unutbu

+0

Quindi le stringhe crude sono la chiave .... Grazie mille per il tuo aiuto! – matthewgall