2014-12-26 45 views
0

我想完成關閉一些其他HTML中的圖像標記,因爲當我用JS創建它,然後發送給自己,它沒有正確關閉。我爲此使用Python。正則表達式將<div><img ...></div>轉換爲<div><img ... /></div>在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一起使用。

謝謝。

回答

2

使用非貪婪.*?

>>> re.sub("<img(.*?)(?<!/)>", "<img\\1 />", str) 
'<div><img src="/images/someImage.png" alt="Some Image" /></div>' 

OR

你也可以嘗試

>>> 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的正確工具。推薦使用html解析器,如BeautifulSoup

+0

完美。 (沒有線索誰只是downvoted你)。 – David

+0

@大衛很高興聽到它幫助:) – nu11p01n73R

+0

你能解釋第二種方法嗎?我從來沒有看到過。我一定會看看美麗的湯。 – David

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 
+0

嗯,這是相當醜陋考慮到我需要的是另一個'?'。它也不使用正則表達式,這是個問題。看到正確的方式來做到這一點的其他答案。 – David

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> 
相關問題