2013-05-16 61 views
0

我有一個字符串,我想解析和修改匹配正則表達式的某些子字符串。修改每次出現的正則表達式匹配

我需要解析的文本是文本的和由<a>標籤包圍的混合物<img>標籤和我需要去掉整個<a>標籤並與<img>標籤的src屬性的修改後的版本替換它。下面的代碼在獲取src屬性方面做得很好,但是隻返回匹配子字符串的正則表達式的列表,如果不知道匹配的位置,那麼這些列表就無法使用。

print re.findall('<a.+><img.+src="(.+?)".+/></a>', sample_text) 

(我知道,這再不是防彈但它的確適合這個工作)

請告訴我達到預期效果的最佳方法是什麼?

例輸入:

<a href="http://www.example.com/test.png"><img src="http://www.example.com/test.png" /></a> 

Bla blabla 

<a href="http://www.example.com/test.png"><img src="http://www.example.com/test.png" /></a> 
bla bla bla 

所需的輸出:

<div><img src="http://www.different_domain.com/images/test.png" /><div> 

Bla blabla 

<div><img src="http://www.different_domain.com/images/test.png" /></div> 
bla bla bla 
+0

你有一些示例數據 - 輸入和所需的輸出? –

+1

好點,只是加了一些 –

回答

1

您可以使用re.sub進行替換:

>>> string = '''<a href="http://www.example.com/test.png"><img src="http://www.example.com/test.png" /></a> 

Bla blabla 

<a href="http://www.example.com/test.png"><img src="http://www.example.com/test.png" /></a> 
bla bla bla''' 
>>> print re.sub(r'<a.*><img(.+)src="(.+?)(\/[^\/]+)"(.*/?)></a>', r'<div><img\1src="http://different-domain.com/images\3"\4></div>', string) 
<div><img src="http://different-domain.com/images/test.png" /></div> 

Bla blabla 

<div><img src="http://different-domain.com/images/test.png" /></div> 
bla bla bla 

你可能希望獲得更多的羣體,但我認爲這是你正在尋找的要點