Вопрос по работе группирующих скобок в регулярном выражении

Имеются строки состоящие вперемешку из хэштэгов и других символов. Мне необходимо поделить парами символы и хэштэги, идущие за ними. Пример: есть строка 'abc####d##c#' Я написал вот такое вот:

import re
def clean_string(s):
    string = re.findall(r'(\w+)(#+)', s)
    return string

На выходе получаю кортежи : [('abc', '####'), ('d', '##'), ('c', '#')]

Но, к сожалению, это не работает если последний символ не хэштэг. Тогда последней пары просто не получается. Я совершенно нулячий в регулярках. Подскажите, пожалуйста, можно ли сделать как-то, чтобы если последнему символу уже не хватает хэштэга, то вместо него парой добавлялся какой-нибудь символ? Что-то типа как в itertools.zip_longest.


Ответы (1 шт):

Автор решения: dIm0n

Используйте * вместо +:

import re

def clean_string(s):
    s1 = re.findall(r'(\w+)(#*)', s)
    return s1

print(clean_string('abc####d##c#'))
print(clean_string('abc####d##c'))
→ Ссылка