Python регулярное выражение найти все цифры и точки

Я использую re.findall (), чтобы извлечь некоторые номера версий из файла HTML:

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

но я бы хотел получить только те, которые не заканчиваются точкой. Имя файла не всегда может быть .zip, поэтому я не могу просто вставить .zip в регулярное выражение.

Я хочу закончить с:

['0.2.1', '0.2.1']

Кто-нибудь может предложить лучшее регулярное выражение для использования? :)

10.12.2008 15:33:09
1 ОТВЕТ
РЕШЕНИЕ
re.findall(r"Test([0-9.]*[0-9]+)", text)

или немного короче:

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

Кстати, вы не должны избегать точки в классе символов:

[\.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 .
16
1.05.2012 17:18:44
Вероятно, должно быть \ d +, если число может быть больше 9
unbeknown 10.12.2008 15:46:23
Это должно быть r «Test ([\ d.] * \ D +)» - \ d ничего не значит в строке, поэтому оно работает, но в целом это хорошая практика - не полагаться на это. Вы можете сделать r «Test (\ d * (?: \. \ D +))», если вы хотите быть немного более ограничительным (например, отклонить 1..2)
ianb 11.12.2008 00:31:32