Я пытаюсь захватить номер версии из строки через python regex...
Данное имя файла: facter-1.6.2.tar.gz
Когда внутри цикла:
import re
version = re.split('(.*\d\.\d\.\d)',sfile)
print version
Как получить версию 1.6.2 в версию
Две логические проблемы:
1) Поскольку вы хотите только часть 1.6.2, вы не хотите захватывать часть .*
До первого \d
, поэтому она выходит за круглые скобки.
2) Так как вы хотите только сопоставить шаблон, о котором идет речь, и взять его, используя re. раскол не имеет смысла. Вместо этого используйте re.match
. Это даст вам объект Match, и вы можете использовать его .group()
для получения фактического совпадающего текста. "группа 0" - это весь сопоставленный шаблон, "группа 1" соответствует тому, что находится внутри первого набора круглых скобок и т.д.
>>> re.match('.*(\d\.\d\.\d)', 'factor-1.6.2.tar.gz').group(1)
'1.6.2'
Хотя, как указывает другой ответ, на самом деле нет никакого смысла в сопоставлении .*
Part, потому что мы можем вместо этого искать строку, состоящую только из той части, которую мы хотим. Это будет искать шаблон в любом месте строки (соответствие ожидает, что оно будет в начале). Поскольку нам не нужны скобки, чтобы заставить шаблон работать логически, и потому что теперь мы будем использовать всю согласованную часть, у нас больше не будет необходимости в круглых скобках.
>>> re.search('\d\.\d\.\d', 'factor-1.6.2.tar.gz').group(0)
'1.6.2'
match = re.search(r'\d\.\d\.\d', sfile)
if match:
version = match.group()
>>> re.search(r"\d+(\.\d+)+", sfile).group(0)
'1.6.2'