2008-12-10 7 views
6

j'utilise re.findall() pour extraire des numéros de version d'un fichier HTML:Python numéros regex de findAll et des points

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

mais je voudrais obtenir que ceux qui ne se terminent pas par un point. Le nom de fichier n'est peut-être pas toujours .zip, donc je ne peux pas coller .zip dans l'expression rationnelle.

fin, je veux avec:

['0.2.1', '0.2.1'] 

Quelqu'un peut-il suggérer une meilleure regex à utiliser? :)

Répondre

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

ou, un peu plus court:

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

Par ailleurs - vous ne devez pas échapper au point dans une classe de caractères:

[\.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

fonctionne très bien, merci beaucoup! – Ashy

+0

Il devrait probablement être \ d + si les nombres peuvent être supérieurs à 9 –

+0

True. Je vais ajouter cela, merci. – Tomalak