我有一大堆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>
标记时都这样做
答案 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/.."}}
路径。