首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用<div><img将<div><img .></div>转换为<div><img. /></div>

用<div><img将<div><img .></div>转换为<div><img. /></div>
EN

Stack Overflow用户
提问于 2014-12-26 13:33:46
回答 3查看 65关注 0票数 0

我试图在其他HTML中关闭一个图像标记,因为当我用JS创建它,然后发送给我自己时,它没有正确地关闭。我要用Python来做这个。

给定这个字符串:

代码语言:javascript
复制
<div><img src="/images/someImage.png" alt="Some Image"></div>

我怎么才能得到

代码语言:javascript
复制
<div><img src="/images/someImage.png" alt="Some Image" /></div>

这就是我到目前为止想出的:

代码语言:javascript
复制
re.sub("<img(.*)(?<!/)>", "<img\\1 />", x)

对于这个图像,它可以工作,但是一旦我添加了div来包围它,它就会把它放在错误的位置:

代码语言:javascript
复制
<div><img src="http://sh.local/images/tripAlbums/2014/thumbs/Background%20Default.jpeg"></div />

正如你会注意到的,结尾的DIV有我想要的图像标签。

请注意,虽然我只显示了一个图像,但可能还有更多的图像,因此应该可以使用全局re.sub

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-26 13:36:31

使用非贪婪的.*?

代码语言:javascript
复制
>>> re.sub("<img(.*?)(?<!/)>", "<img\\1 />", str)
'<div><img src="/images/someImage.png" alt="Some Image" /></div>'

你也可以试试

代码语言:javascript
复制
>>> re.sub("<img([^>]*)(?<!/)>", "<img\\1 />", str)
'<div><img src="/images/someImage.png" alt="Some Image"/></div>'
  • [^>]*否定字符类。匹配除>零或更多次以外的任何内容。

清洁法

一种更干净、更美观的方法是使用BeautifulSoup

代码语言:javascript
复制
>>> import bs4
>>> str='<div><img src="/images/someImage.png" alt="Some Image"></div>'
>>> soup = bs4.BeautifulSoup(str)
>>> soup.prettify()
u'<div>\n <img alt="Some Image" src="/images/someImage.png"/>\n</div>'

Note Regex不是解析的合适工具。建议使用像BeautifulSoup这样的html解析器

票数 2
EN

Stack Overflow用户

发布于 2014-12-26 13:47:13

BeautifulSoup将自动为您完成这项工作。

代码语言:javascript
复制
>>> from bs4 import BeautifulSoup
>>> s = '''<div><img src="/images/someImage.png" alt="Some Image"></div>'''
>>> soup = BeautifulSoup(s)
>>> soup
<html><body><div><img alt="Some Image" src="/images/someImage.png"/></div></body></html>
票数 1
EN

Stack Overflow用户

发布于 2014-12-26 13:41:18

代码语言:javascript
复制
s='<div><img src="/images/someImage.png" alt="Some Image"></div>'
n=s.find('<img')
result=s[:n+1]
s=s[n+2:]
n=s.find('>')
result=result+s[:n]+" / "+s[n:]
print result
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27657879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档