Python的正则表达式替换字符串

问题描述:

我有一个HTML块,它包含多个<img>标签的部件的多个occurencies。标签的当前格式是:Python的正则表达式替换字符串

<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 2013-03-19 17:33:03

+0

是的,我正在清理要导入到Magento中的数据。这就是它的形象标签 – iamjonesy 2013-03-19 17:35:01

您需要捕获的文件名作为一个群体,就可以一气呵成替换:

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()电话将取代所有{{media url="wisywig/.."}}语法匹配/images/stories/..路径。

+0

感谢您的答案。你能够更新正则表达式,以便能够处理文件名中的可能空格,即某些东西%20something.jpg – iamjonesy 2013-03-20 09:25:58

+0

@iamjonesy:done;你所需要做的就是将'\ w'扩展为一个可以添加'%'作为选项的字符类。 – 2013-03-20 10:04:32

+0

@Martijin谢谢! – iamjonesy 2013-03-20 10:19:15