2008-12-10 24 views
6

Ich verwende re.findall() einige Versionsnummern aus einer HTML-Datei zu extrahieren:Python Regex findall Zahlen und Punkte

>>> import re 
>>> text = "<table><td><a href=\"url\">Test0.2.1.zip</a></td><td>Test0.2.1</td></table> Test0.2.1" 
>>> re.findall("Test([\.0-9]*)", text) 
['0.2.1.', '0.2.1', '0.2.1'] 

aber ich möchte nur diejenigen zu erhalten, die in einem nicht enden Punkt. Der Dateiname ist möglicherweise nicht immer .zip, also kann ich nicht einfach .zip in die Regex stecken.

Ich möchte am Ende mit:

['0.2.1', '0.2.1'] 

Kann jemand eine bessere regex vorschlagen zu benutzen? :)

Antwort

12
re.findall(r"Test([0-9.]*[0-9]+)", text) 

oder, etwas kürzer:

re.findall(r"Test([\d.]*\d+)", text) 

By the way - Sie müssen nicht den Punkt in einer Zeichenklasse entkommen:

[\.0-9] // matches: 0 1 2 3 4 5 6 7 8 9 . \ 
[.0-9] // matches: 0 1 2 3 4 5 6 7 8 9 . 
+0

Funktioniert prima, vielen Dank! – Ashy

+0

Es sollte wahrscheinlich \ d + sein, wenn Zahlen größer als 9 sein können –

+0

True. Ich werde das hinzufügen, danke. – Tomalak