Python正则表达式:搜索HTML标记并修改它们

时间:2013-09-10 11:18:10

标签: python html regex tags

我有一个HTML文件作为字符串,想要将所有<img src="http:.../../filename.png ..>更改为<img src="id:filename.png>如何使用正则表达式执行此操作?

到目前为止我得到了这个:

urls = re.findall(r'src=[\'"]?([^\'" >]+)', html)
allUrls = ', '.join(urls)

1 个答案:

答案 0 :(得分:0)

如果您控制HTML,那么正则表达式就可以了。

的Python:

import re
html = re.sub(r'(<img src=").+/(.+">)', r'\1id:\2', html)

HTML:

<img src="http://example.com/filename1.jpg">
<img src="http://example.com/filename2.jpg">

否则,正则表达式会变得非常混乱。我建议lxmlBeautifulSoup也很棒。

import lxml.etree, os, urlparse
root = lxml.etree.HTML(html)
for img in root.iter("img"):
    src = img.get("src", None)
    if src is not None:
        if urlparse.urlparse(src).scheme in ("http", "https"):
            src_path = urlparse.urlparse(src).path
            src_path_base = os.path.basename(src)
            src = "id:" + os.path.basename(src)
            img.set("src", src)
html = lxml.etree.tostring(root)

这可以应对许多情况,即使不是不可能使用正则表达式也会很尴尬。例子:

<img src=http://example.com/filename.jpg>

<img src=http%3A%2F%2Fexample.com%2Ffilename.jpg>

<img title="src=http://example.com/bait.jpg" src=http://example.com/filename.jpg>

<img src=data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==>

<img
src
= 
http://example.com/filename.jpg
>

<img src="http://example.com/book report cover.jpg"> <!-- invalid but common -->