Есть ли способ сопоставить шаблон (e\d\d
) несколько раз, захватывая каждый в группу? Например, с учетом строки ..
blah.s01e24e25
.. Я хочу получить четыре группы:
1 -> blah
2 -> 01
3 -> 24
4 -> 25
Очевидное регулярное выражение для использования в (в Python регулярное выражение:
import re
re.match("(\w+).s(\d+)e(\d+)e(\d+)", "blah.s01e24e25").groups()
.. но я также хочу сопоставить одно из следующих:
blah.s01e24
blah.s01e24e25e26
Похоже, вы не можете (e\d\d)+
, точнее, можете, но он фиксирует только последнее вхождение:
>>> re.match("(\w+).s(\d+)(e\d\d){2}", "blah.s01e24e25e26").groups()
('blah', '01', 'e25')
>>> re.match("(\w+).s(\d+)(e\d\d){3}", "blah.s01e24e25e26").groups()
('blah', '01', 'e26')
Я хочу сделать это в одном регулярном выражении, потому что у меня есть несколько шаблонов для совпадения имен файлов телевизионных эпизодов, и я не хочу дублировать каждое выражение для обработки нескольких эпизодов:
\w+\.s(\d+)\.e(\d+) # matches blah.s01e01
\w+\.s(\d+)\.e(\d+)\.e(\d+) # matches blah.s01e01e02
\w+\.s(\d+)\.e(\d+)\.e(\d+)\.e(\d+) # matches blah.s01e01e02e03
\w - \d+x\d+ # matches blah - 01x01
\w - \d+x\d+\d+ # matches blah - 01x01x02
\w - \d+x\d+\d+\d+ # matches blah - 01x01x02x03
.. и т. Д. Для множества других шаблонов.
Еще одна вещь, которая усложняет ситуацию - я хочу сохранить эти регулярные выражения в файле конфигурации, поэтому решение с использованием нескольких регулярных выражений и вызовов функций нежелательно - но если это окажется невозможным, я просто позволю пользователю добавлять простые регулярные выражения
В принципе, есть ли способ захватить повторяющийся паттерн с помощью регулярных выражений?