修改每次出现的正则表达式匹配

时间:2013-05-16 15:13:16

标签: python regex

我有一个字符串,我想解析并修改某些与正则表达式匹配的子字符串。

我需要解析的文本是由<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

1 个答案:

答案 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

您可能希望捕获更多群组,但我认为这是您正在寻找的要点