首页 > 网页制作 >如何用正则提取文本中的所有超链接?

如何用正则提取文本中的所有超链接?

来源:互联网 2026-07-06 08:16:01

如何用正则表达式精准提取文本中的超链接? 直接上手写正则提取超链接,最容易踩的坑就是“以为看见网址就能匹配”——实际上,纯文本里混着邮箱地址、JavaScript伪协议、甚至是标点符号末尾的残缺URL,分分钟让结果跑偏。真正的关键,不在于“找网址”,而在于“识别哪一段是真实可跳转的链接结构”。下面这

如何用正则表达式精准提取文本中的超链接?

直接上手写正则提取超链接,最容易踩的坑就是“以为看见网址就能匹配”——实际上,纯文本里混着邮箱地址、JavaScript伪协议、甚至是标点符号末尾的残缺URL,分分钟让结果跑偏。真正的关键,不在于“找网址”,而在于“识别哪一段是真实可跳转的链接结构”。下面这几个正则表达式模式,基本覆盖了你能遇到的绝大多数场景。

如何用正则提取文本中的所有超链接?

长期稳定更新的攒劲资源: >>>点此立即查看<<<

匹配协议开头的完整URL

这是最常用也最稳妥的方式,适用于 http、https 开头的链接:

  • 使用 r'https://[^s"']+' ——匹配以 http 或 https 开头、直到空格或常见分隔符(引号、尖括号)为止的字符串。
  • 它自动避开后面跟着的标点,例如 https://example.com. 中的句号不会被包含进去。
  • 注意:不处理编码字符(如 %20),但日常文本基本够用;如需更严谨,可扩展为支持百分号编码的版本。

兼容 href 属性里的链接

如果这段文本其实是 HTML 片段(比如从网页源码里截出来的),那么重点就是抓取 href 属性的值:

  • 使用 r'href=["']([^"']+)["']' ——同时支持单引号和双引号包裹的 URL。
  • 捕获组 ([^"']+) 确保只取引号内的内容,不会跨标签误吞。
  • 如果还可能遇到无引号写法(如 href=/about),可升级为:r'hrefs*=s*["']?([^"'>s]+)'

覆盖更多常见链接类型

实际文本中还有不少非 http 开头但仍是有效链接的地址:

  • //cdn.example.com/js/app.js(协议相对 URL)→ 匹配 r'//[^"'s>]+'
  • /api/v1/data(根相对路径)→ 匹配 r'/(?![a-zA-Z@-])[^"'s>]*'(排除邮箱等干扰)
  • 如果需要一并提取 srcdata-url 等属性,可用统一模式:r'(?:href|src|data-url)s*=s*["']?([^"'s>]+)'

提取后记得简单清洗

正则提取的是原始字符串,后续建议做这几步再用:

  • strip() 去掉首尾空白或多余符号(比如逗号、括号)。
  • 过滤掉 javascript:mailto:tel: 这类非页面跳转链接。
  • 对相对路径(如 /about./img.png),若需转成绝对地址,得结合原始网页 base URL 拼接。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。