【问题标题】:Remove the Query String from a Url in HTML with a Regular Expression使用正则表达式从 HTML 中的 URL 中删除查询字符串
【发布时间】:2008-11-07 10:44:06
【问题描述】:

给定一个 html 文档,从文档中的每个 url 中删除查询字符串的最正确和简洁的正则表达式模式是什么?

【问题讨论】:

    标签: html regex url parsing


    【解决方案1】:

    您无法使用正则表达式有效地解析 HTML。如果你事先知道页面的格式 — eg.

    • 链接始终采用 的形式,或者
    • 所有链接都是绝对链接,没有其他以http:开头的非链接字符串存在

    那么你可以摆脱它,但对于一般的 [X]HTML 正则表达式解析器是不合适的。

    根据您使用的语言,您需要找到一个 HTML 解析器库(例如 Python 的 BeautifulSoup),或者一个与标准 XML 解析器相结合的 HTML 整理器,然后扫描文档中的 元素(也许还有其他人,例如 如果您对这些感兴趣?),然后将属性值拆分为 '?'。

    【讨论】:

    • 谢谢 bobince,我实际上使用的是 BeautifulSoup,但我正在寻找一种快速而肮脏的方式,而不是遍历所有链接。
    【解决方案2】:

    Re: Bobince 的评论,HTMLAgilityPack 是一个很好的 .NET html 解析器,它比其他解析器更宽容地处理不正确的标记。

    使用它可以让您找到所有 A 标记,然后您可以获取 HREF 并简单地删除任何内容,包括 '?'

    【讨论】:

      【解决方案3】:

      找到这个:

      /href="([^\?"]*?)\?[^\"]*"/
      

      替换为:

      href="\1"
      

      您可能需要注意它不会去除<link> 标签。

      【讨论】:

      • 有不少情况不匹配:href = "foo?bar", href = foo?bar (无效但仍可能出现) href='foo?bar'
      猜你喜欢
      • 2014-05-21
      • 2015-12-31
      • 2012-02-06
      • 1970-01-01
      • 2017-08-24
      • 2021-11-22
      • 2012-02-26
      • 2010-12-22
      相关资源
      最近更新 更多