2013-03-19 11 views
0

У меня есть кусок HTML, который содержит несколько тегов <img>. Текущий формат тега:Python Regex заменить несколько случаев из частей строки

<img width="580" height="183" src="/images/stories/acidalkalinetable.jpg" alt="acid alkaline table" title="Body pH Balance"> 

Я хочу, чтобы пройти через HTML и для каждого <img> тега изменить формат:

<img width="580" height="183" src="{{media url="wysiwyg/acidalkalinetable.jpg"}}" alt="acid alkaline table" title="Body pH Balance"> 

Вы можете увидеть это src, что меняется. Я сохранил имя файла, но изменил другие части src

Если IMG была одна строка, я мог бы сделать что-то вроде:

content = '<img width="580" height="183" src="/images/stories/acidalkalinetable.jpg" alt="acid alkaline table" title="Body pH Balance">' 

filename = re.search(r'/images/stories/\w+\.(jpg|png|gif)', content) 

new_content = re.sub(r'/images/stories/\w+\.(jpg|png|gif)', '{{media url="wysiwyg/' + filename + '"}}', content) 

(я не проверял, что)

Но Я не знаю, как я могу сделать это для каждого вхождения <img> тега в HTML

+0

Вы уверены, что цитируете? '' {{media url = "wysiwyg/acidalkalinetable.jpg"}} "', часть wsiwyg находится вне цитаты. – nhahtdh

+0

Да, я очищаю данные для импорта в Magento. Вот как это делается, это теги изображений – iamjonesy

ответ

2

вы должны захватить имя файла в качестве группы, вы можете заменить его на одном дыхании:

re.sub(r'/images/stories/([\w%]+\.(?:jpg|png|gif))', r'{{media url="wysiwyg/\1"}}', content) 

Это ставит группу захвата ((...)) вокруг всего файла, включая расширение (теперь сам, используя не -capturing (?:...) группу, а), в результате чего:

>>> re.sub(r'/images/stories/([\w%]+\.(?:jpg|png|gif))', r'{{media url="wysiwyg/\1"}}', content) 
'<img width="580" height="183" src="{{media url="wysiwyg/acidalkalinetable.jpg"}}" alt="acid alkaline table" title="Body pH Balance">' 

Это использует \1 как образец замены, см. re.sub() documentation.

Этот re.sub() вызов заменит все соответствие /images/stories/.. пути с синтаксисом {{media url="wisywig/.."}}.

+0

Спасибо за ответ. Могли бы вы обновить регулярное выражение так, чтобы оно могло обрабатывать возможные пробелы в имени файла, то есть что-то% 20something.jpg – iamjonesy

+0

@iamjonesy: done; все, что вам нужно было сделать, это расширить '\ w' до characterclass, который добавляет'% 'в качестве опции. –

+0

@Martijin спасибо! – iamjonesy

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