我试图在其他HTML中关闭一个图像标记,因为当我用JS创建它,然后发送给我自己时,它没有正确地关闭。我要用Python来做这个。
给定这个字符串:
<div><img src="/images/someImage.png" alt="Some Image"></div>我怎么才能得到
<div><img src="/images/someImage.png" alt="Some Image" /></div>这就是我到目前为止想出的:
re.sub("<img(.*)(?<!/)>", "<img\\1 />", x)对于这个图像,它可以工作,但是一旦我添加了div来包围它,它就会把它放在错误的位置:
<div><img src="http://sh.local/images/tripAlbums/2014/thumbs/Background%20Default.jpeg"></div />正如你会注意到的,结尾的DIV有我想要的图像标签。
请注意,虽然我只显示了一个图像,但可能还有更多的图像,因此应该可以使用全局re.sub。
谢谢。
发布于 2014-12-26 13:36:31
使用非贪婪的.*?
>>> re.sub("<img(.*?)(?<!/)>", "<img\\1 />", str)
'<div><img src="/images/someImage.png" alt="Some Image" /></div>'或
你也可以试试
>>> re.sub("<img([^>]*)(?<!/)>", "<img\\1 />", str)
'<div><img src="/images/someImage.png" alt="Some Image"/></div>'[^>]*否定字符类。匹配除>零或更多次以外的任何内容。清洁法
一种更干净、更美观的方法是使用BeautifulSoup
>>> 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解析器
发布于 2014-12-26 13:47:13
BeautifulSoup将自动为您完成这项工作。
>>> 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>发布于 2014-12-26 13:41:18
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 resulthttps://stackoverflow.com/questions/27657879
复制相似问题