最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何使用正则提取一段话中所有的超链接?
时间:2026-07-01 11:17:52 编辑:袖梨 来源:一聚教程网
应优先用正则r'https?://[^s"'<>'']+匹配协议开头的真实URL,再扩展支持HTML的href属性、协议相对URL(//)、根相对路径(/)及src等属性,提取后需清洗并过滤伪协议。
直接用正则提取一段话里的超链接,关键不是“找网址”,而是“识别真实可跳转的链接结构”。纯文本中混杂的 URL 可能是邮箱、假链接、JS 伪协议,得靠模式设计来过滤。
匹配协议开头的完整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>]*'(排除邮箱等干扰)
- 如果需要一并提取
src、data-url等属性,可用统一模式:r'(?:href|src|data-url)s*=s*["']?([^"'s>]+)'
提取后记得简单清洗
正则提取的是原始字符串,后续建议做这几步再用:
- 用
strip()去掉首尾空白或多余符号(比如逗号、括号) - 过滤掉
javascript:、mailto:、tel:这类非页面跳转链接 - 对相对路径(如
/about或./img.png),若需转成绝对地址,得结合原始网页 base URL 拼接
相关文章
- 夸克浏览器如何拦截弹窗 07-03
- 异环最新兑换码大全汇总 07-03
- 深渊秘境手游好玩吗 深渊秘境手游核心玩法与新手入门指南 07-03
- Matt Pocock Skills 怎么安装?AI 编程 Agent 技能包入口说明 07-03
- AU如何将单声道转换成立体声效果 07-03
- 异人之下天下会武玩法详解 异人之下天下会武赛制规则与参与指南 07-03