应优先用正则r'https?://[^s"'<>'']+匹配协议开头的真实URL,再扩展支持HTML的href属性、协议相对URL(//)、根相对路径(/)及src等属性,提取后需清洗并过滤伪协议。
直接用正则提取一段话里的超链接,关键不是“找网址”,而是“识别真实可跳转的链接结构”。纯文本中混杂的 URL 可能是邮箱、假链接、JS 伪协议,得靠模式设计来过滤。
这是最常用也最稳妥的方式,适用于 http、https 开头的链接:
如果这段话其实是 HTML 片段(比如从网页源码里截出来的一段),那重点是抓 href 的值:
([^"']+) 确保只取引号内的内容,不会跨标签误吞href=/about),可升级为:r'hrefs*=s*["']?([^"'>s]+)'
实际文本中还有不少非 http 开头但仍是有效链接的地址:
src、data-url 等属性,可用统一模式:r'(?:href|src|data-url)s*=s*["']?([^"'s>]+)'
正则提取的是原始字符串,后续建议做这几步再用:
strip() 去掉首尾空白或多余符号(比如逗号、括号)javascript:、mailto:、tel: 这类非页面跳转链接/about 或 ./img.png),若需转成绝对地址,得结合原始网页 base URL 拼接