2011-01-15 7 views
7
arbeiten

ich den folgenden Code verwenden:Python Regex nicht

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

Allerdings, wenn ich übergebe Ihnen die folgende Zeichenfolge:

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

Es findet nichts, wenn ich es bin erwartet zu finden : http://uploadir.com/u/bb41c5b3. Was mache ich falsch?

Ich habe die Regex mit http://gskinner.com/RegExr/ getestet und es scheint richtig zu sein. Fehle ich hier etwas?

Antwort

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

Sie genial! Vielen Dank! Warten Sie 5 Minuten, um als>> fest zu markieren – matthewgall

6

in die Gewohnheit, alle regex Muster mit rohen Saiten machen:

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'] 

Der Unterschied ist auf \binterpreted differently sein:

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

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

'\b' eine ASCII-Rück ist, während r'\b' a String bestehend aus den zwei Zeichen, einem Backslash und einem b.

+0

Ihre Zeilen sind identisch, vielleicht gibt es ein zusätzliches 'r' in der ersten Zeile? –

+0

@Mark E: Danke. Korrigiert. – unutbu

+0

So rohe Saiten sind der Schlüssel .... Vielen Dank für Ihre Hilfe! – matthewgall