Регулярное выражение 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']

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


person Ashy    schedule 10.12.2008    source источник


Ответы (1)


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

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

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

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

person Tomalak    schedule 10.12.2008
comment
Вероятно, это должно быть \d+, если числа могут быть больше 9 - person ; 10.12.2008
comment
Это должен быть rTest([\d.]*\d+) -- \d ничего не означает в строке, поэтому он работает, но в целом рекомендуется не полагаться на это. Вы можете сделать rTest(\d*(?:\.\d+)) если хотите быть немного более ограничительным (например, отклонив 1..2) - person ianb; 11.12.2008