2013-05-16 2 views
0

У меня есть строка, которую я бы хотел разобрать и изменить некоторые подстроки, которые соответствуют регулярному выражению.Изменить каждое совпадение регулярных выражений

Текст мне нужно разобрать это смесь текста и <img> теги окружении <a> тегов и мне нужно вырезать весь <a> тег и заменить его с модифицированной версией атрибута ГКЗ <img> тега. Следующий код отлично справляется с получением атрибута src, но возвращает мне только список регулярных выражений, соответствующих подстрокам, которые не очень полезны, не зная позиций, в которых было найдено совпадение.

print re.findall('<a.+><img.+src="(.+?)".+/></a>', sample_text) 

(я знаю, что это повторное не пуленепробиваемые, но он делает для этой работы)

Что лучший способ для достижения желаемого эффекта?

Пример ввода:

<a href="http://www.example.com/test.png"><img src="http://www.example.com/test.png" /></a> 

Bla blabla 

<a href="http://www.example.com/test.png"><img src="http://www.example.com/test.png" /></a> 
bla bla bla 

Желаемый результат:

<div><img src="http://www.different_domain.com/images/test.png" /><div> 

Bla blabla 

<div><img src="http://www.different_domain.com/images/test.png" /></div> 
bla bla bla 
+0

Есть ли у вас пример данных - Вход и желаемый выход? –

+1

хороший момент, только что добавил –

ответ

1

Вы можете использовать re.sub сделать замену:

>>> string = '''<a href="http://www.example.com/test.png"><img src="http://www.example.com/test.png" /></a> 

Bla blabla 

<a href="http://www.example.com/test.png"><img src="http://www.example.com/test.png" /></a> 
bla bla bla''' 
>>> print re.sub(r'<a.*><img(.+)src="(.+?)(\/[^\/]+)"(.*/?)></a>', r'<div><img\1src="http://different-domain.com/images\3"\4></div>', string) 
<div><img src="http://different-domain.com/images/test.png" /></div> 

Bla blabla 

<div><img src="http://different-domain.com/images/test.png" /></div> 
bla bla bla 

Вы, вероятно, хотите, чтобы захватить больше групп, но я думаю, это суть того, что вы ищете

Смежные вопросы