我有一个字符串,我想解析并修改某些与正则表达式匹配的子字符串。
我需要解析的文本是由<img>
标记所包围的文本和<a>
标记的混合,我需要删除整个<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)
您可以使用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
您可能希望捕获更多群组,但我认为这是您正在寻找的要点