У меня проблемы с созданием регулярного выражения, соответствующего конкретному случаю. У меня есть список ТВ-шоу в 4 форматах:
- Name.Of.Show.S01E01
- Name.Of.Show.0101
- Name.Of.Show.01x01
- Name.Of.Show.101
То, что я хочу сопоставить, это название шоу. Моя главная проблема в том, что мое регулярное выражение сопоставляет название шоу с предыдущим «.». Мое регулярное выражение следующее:
"^([0-9a-zA-Z\.]+)(S[0-9]{2}E[0-9]{2}|[0-9]{4}|[0-9]{2}x[0-9]{2}|[0-9]{3})"
Некоторые примеры:
>>> import re
>>> SHOW_INFO = re.compile("^([0-9a-zA-Z\.]+)(S[0-9]{2}E[0-9]{2}|[0-9]{4}|[0-9]{2}x[0-9]{2}|[0-9]{3})")
>>> match = SHOW_INFO.match("Name.Of.Show.S01E01")
>>> match.groups()
('Name.Of.Show.', 'S01E01')
>>> match = SHOW_INFO.match("Name.Of.Show.0101")
>>> match.groups()
('Name.Of.Show.0', '101')
>>> match = SHOW_INFO.match("Name.Of.Show.01x01")
>>> match.groups()
('Name.Of.Show.', '01x01')
>>> match = SHOW_INFO.match("Name.Of.Show.101")
>>> match.groups()
('Name.Of.Show.', '101')
Итак, вопрос в том, как избежать первой группы, заканчивающейся точкой? Я понимаю, что могу просто сделать:
var.strip(".")
Однако это не относится к случаю "Name.Of.Show.0101". Есть ли способ, которым я мог бы улучшить регулярное выражение, чтобы лучше справиться с этим делом?
Заранее спасибо.