【问题标题】:Python regex: search for HTML tags and modify themPython regex:搜索 HTML 标签并修改它们
【发布时间】:2013-09-10 11:18:09
【问题描述】:

我得到了一个字符串形式的 HTML 文件,我想将所有 <img src="http:.../../filename.png ..> 更改为 <img src="id:filename.png> 我如何使用正则表达式来做到这一点?

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

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

【问题讨论】:

  • 永远不要使用正则表达式解析 HTML。使用 HTML 解析器,例如 BeautifulSouplxml
  • @alecxe:个正则表达式与 HTML 相结合的应用程序。 通常但是,HTML 解析器是更好的解决方案。
  • @MartijnPieters 当然,谢谢,ever 是为了增加一些重点。
  • 理论上 HTML/XML/Java 无法使用正则表达式进行解析。为此需要使用上下文无关语法。
  • 感谢您的帮助! stackoverflow.com/questions/1579133/… 似乎使用 HTML 解析器解决了我的问题!

标签: python html regex tags


【解决方案1】:

如果你控制 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 -->

【讨论】:

    猜你喜欢
    • 2013-10-21
    • 2010-12-31
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多