Вы используете к началу паттерна вашего ре:
<img=([^}]*)>
это сожрет (как группа 1) все символы после ведущего <img=
, , включая другие теги !!! , вплоть до последнего >
, возможно, оно сожрет; *
Жадность - она сожрает столько, сколько возможно. Не знаете, почему вы специально исключаете закрытые скобки }
? Возможно, вы хотели исключить закрытые угловые скобки (>
).
Для не жадного сопоставления вместо *
вам понадобится *?
; при этом вы будете сожрать как можно меньше, а не столько, сколько сможете. Итак, я думаю, что вы имеете в виду:
p = re.compile(r'<img=([^>]*?)>(.*?)</img>', re.S)
это соответствует одному тегу img
(и всем тегам внутри него) и, кажется, выполняет именно те замены, которые вы имеете в виду.