Когда вы используете findall
с регулярным выражением, содержащим группы захвата, он не возвращает совпадения для всего шаблона, только захваченные группы.
Кажется, нет необходимости взахватить группу в своем регулярном выражении, поэтому избавьтесь от нее.
tags = re.findall("\[(?:'\w+'(?:, )?)*\]", tags)
это возвращает:
["['foo', 'bar', 'spam']"]