Python регулярное выражение re.compile () строка соответствия

1

Я пытаюсь захватить номер версии из строки через python regex...

Данное имя файла: facter-1.6.2.tar.gz

Когда внутри цикла:

import re
version = re.split('(.*\d\.\d\.\d)',sfile)
print version

Как получить версию 1.6.2 в версию

Теги:

3 ответа

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'
  • 0
    Карл, спасибо, что уделили время. Теперь намного понятнее!
2
match = re.search(r'\d\.\d\.\d', sfile)
if match:
    version = match.group()
  • 0
    спасибо! ... мне, конечно, не хватало логики регулярных выражений ... будет больше rtfm ... можете ли вы указать мне, как легко регулярное выражение? читая пидоки сейчас.
  • 0
    Мне очень нравятся регулярные выражения и информация для тестирования.
0
>>> re.search(r"\d+(\.\d+)+", sfile).group(0)
'1.6.2'
  • 0
    спасибо Свен! работает отлично

Ещё вопросы

Сообщество Overcoder
Наверх
Меню