Регулярные выражения Python - как захватить несколько групп из группового выражения? - PullRequest
32 голосов
/ 21 января 2009

У меня есть регулярное выражение Python, которое содержит группу, которая может встречаться ноль или много раз, но когда я получаю список групп впоследствии, присутствует только последняя. Пример:

re.search("(\w)*", "abcdefg").groups ()

возвращает список ('g',)

Мне нужно вернуть ('a', 'b', 'c', 'd', 'e', ​​'f', 'g',)

Это возможно? Как мне это сделать?

Ответы [ 2 ]

39 голосов
/ 21 января 2009
re.findall(r"\w","abcdefg")
30 голосов
/ 21 января 2009

В дополнение к решению Дугласа Лидера , вот объяснение:

В регулярных выражениях количество групп фиксировано. Размещение квантификатора за группой не увеличивает количество групп (представьте, что все остальные индексы группы увеличиваются, поскольку более ранняя группа совпадает более одного раза).

Группы с квантификаторами - это способ сделать сложное подвыражение атомарным, когда необходимо сопоставить его более одного раза. Движок регулярных выражений не имеет другого способа, кроме как сохранить последнее совпадение только в группе. Короче говоря: нет единого способа достичь того, чего вы хотите, с помощью одного «невооруженного» регулярного выражения, и вам нужно найти другой путь.

...