У меня есть строка и ее нужно извлечь. Проблема в том, что я не могу описать повторение в повторении. Так вот код:Повторение группы регулярных выражений Python в повторении
f = "Makimak-cg_mk_Mokarmi"
pattern = "([A-Za-z][A-Za-z0-9]+)((?:[-_]([a-z]{2}))+)"
mO = re.match(pattern, f)
print mO.groups()
И результат будет:
('Makimak', '-cg_mk', 'mk')
Но я хотел бы получить кортеж так:
('Makimak', '-cg_mk', 'cg', 'mk')
Так есть группа «- cg_mk ", которые включают повторение двух шаблонов символов. Но нет вещи, как, что:
[a-z]{2}+
Группы результата не дают обратно только последнюю часть повторении выражается здесь:
([a-z]{2})
Моя мысль была, что там должна быть «+» тоже вот так:
([a-z]{2})+
Это дает тот же результат. Объект match создается, просто я не могу получить группы, которые я хочу.
Я сомневаюсь, что это возможно с помощью простого python regex с использованием 're'. AFAIK, все функции в 're' имеют дело с * неперекрывающимися * встречами. Улавливание перекрывающихся событий кажется довольно сложным ... – mgilson
Можете ли вы объяснить немного больше о том, чего вы пытаетесь достичь? Зачем вам нужны повторы в выходе? С какими другими факторами следует работать? – deadly
Мне просто интересно, что я могу сделать с модулем. Можно ли получить результат, описанный выше в одной строке. Конечно, я рассматривал решение, как писал Ф. Дж. – Prag