Многострочный поиск по шаблонам и тегам - PullRequest
0 голосов
/ 09 сентября 2009

Я пытаюсь создать шаблон для тегов, но метод sub просто заменяет первый символ и 3 в конце строки, я пытаюсь заменить все теги в строке многострочным

p=re.compile('<img=([^}]*)>([^}]*)</img>', re.S)
p.sub(r'[img=\1]\2[/img]','<img="test">dsad</img> <img="test2">dsad2</img>')
output:
'**[**img="test">dsad</img> <img="test2"]dsad2**[/img]**'

1 Ответ

1 голос
/ 09 сентября 2009

Вы используете к началу паттерна вашего ре:

<img=([^}]*)>

это сожрет (как группа 1) все символы после ведущего <img=, , включая другие теги !!! , вплоть до последнего >, возможно, оно сожрет; * Жадность - она ​​сожрает столько, сколько возможно. Не знаете, почему вы специально исключаете закрытые скобки }? Возможно, вы хотели исключить закрытые угловые скобки (>).

Для не жадного сопоставления вместо * вам понадобится *?; при этом вы будете сожрать как можно меньше, а не столько, сколько сможете. Итак, я думаю, что вы имеете в виду:

p = re.compile(r'<img=([^>]*?)>(.*?)</img>', re.S)

это соответствует одному тегу img (и всем тегам внутри него) и, кажется, выполняет именно те замены, которые вы имеете в виду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...