Python正则表达式替换字符串的多个部分

时间:2013-03-19 17:27:35

标签: python regex

我有一大堆HTML,其中包含多个<img>标记。标签的当前格式为:

<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)

(我没有测试过)

但我不确定如何在HTML中每次出现<img>标记时都这样做

1 个答案:

答案 0 :(得分:2)

您需要将文件名捕获为一个组,然后您可以一次性替换它:

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

这会将捕获组((...))放在整个文件名周围,包括扩展名(现在本身使用 - 捕获(?:...)组),结果是:< / p>

>>> 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/.."}}路径。