我试图在其他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
配合使用。
感谢。
答案 0 :(得分:2)
使用非贪婪的.*?
>>> 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>'
注意正则表达式不是解析html的正确工具。建议使用像BeautifulSoup
答案 1 :(得分:1)
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>
答案 2 :(得分:0)
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