Чтобы получить список тегов, вы можете использовать нежадную версию оператора +, которая имеет простое преимущество:
re.findall('%(.+?)%', text)
Фактически, .+?%
находит все символы любого типа (тег) и останавливается , как только обнаруживается %
(это «нежадная» часть).
В приведенном ниже тесте скорости не жадная версия этого ответа медленнее, чем версия "не другого знака%", но почти в 2 раза:
python -m timeit -s'import re; t="%t1% lkj lkj %long tag% lkj lkj"*1000' 're.findall("%([^%]+)%", t)'
1000 loops, best of 3: 874 usec per loop
python -m timeit -s'import re; t="%t1% lkj lkj %long tag% lkj lkj"*1000' 're.findall("%(.+?)%", t)'
1000 loops, best of 3: 1.43 msec per loop