Захват повторяющихся подшаблонов с перестановками в Python регулярное выражение - PullRequest
1 голос
/ 10 января 2020

Я пытаюсь токенизировать строку из под-шаблонов, которые могут появляться в любом порядке. Подшаблоны - это подчеркивание, буквы или цифры. Например:

   'ABC_123_DEF_456' would provide ('ABC', '_', '123', '_', 'DEF', '_', '456')

Вот приведенное регулярное выражение, дающее неожиданный результат:

>>> m = regex.match(r'^((_)|(\d+)|([[:alpha:]]+))+$', 'ABC_123_DEF_456')
>>> m.groups()
('456', '_', '456', 'DEF')

Обновления: - перестановки: три подшаблона могут появляться в любом порядке, например:

'ABC123__' would provide ('ABC', '123', '_', '_')

1 Ответ

3 голосов
/ 10 января 2020

Вы можете использовать /([a-z]+|\d+|_)/i для разбиения строки на группы из цифр, букв или символов подчеркивания:

>>> re.findall(r"([a-z]+|\d+|_)", "ABC_123_DEF_456", re.I)
['ABC', '_', '123', '_', 'DEF', '_', '456']
>>> re.findall(r"([a-z]+|\d+|_)", "ABC123__", re.I)
['ABC', '123', '_', '_']
...