You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何仅提取文本列中的主机名与路径名?

提取URL中的主机名和路径名(截止到.js文件)

可以用这个正则表达式来匹配你需要的URL部分:

\(?https?://[\w./-]+?\.js(?=:|\)|$)

正则各部分说明:

  • \(?:匹配URL前可能存在的左括号(有的行里URL被括号包裹,有的没有)
  • https?://:匹配http://或https://,s?表示s是可选的
  • [\w./-]+?\.js:匹配主机名、路径和.js文件名,[\w./-]包含字母、数字、下划线、点、斜杠、连字符;+?是非贪婪匹配,避免过度匹配到后面的行号内容
  • (?=:|\)|$):正向预查,确保匹配到的.js后面紧跟的是冒号(行号开头)、右括号或者字符串结尾,精准截止到.js位置

使用示例(Python):

如果是用Python处理这些文本,可以结合正则提取并去重:

import re

# 你的原始文本列表
raw_lines = [
    "    text2 (https://example.foo.com/url/path/site.js:1:44541)",
    "    text2  (https://example.foo.com/url/path/site.js:1:44541)",
    "    text2  https://example.foo.com/url/path/site.js:1:44541:1:25413)",
    "    text2  (https://exampel2.fooo.io/unique/bundle.js:2:172704)",
    "    text2  (ttps://exampel2.fooo.io/unique/bundle.js:2:173513)",
    "    text2  https://exampel2.fooo.io/unique/bundle.js:2:171673",
    "    text3 (https://exampel2.fooo.io/unique/bundle.js:2:171651)"
]

# 正则模式
pattern = r"\(?https?://[\w./-]+?\.js(?=:|\)|$)"
unique_urls = set()

for line in raw_lines:
    matches = re.findall(pattern, line)
    for match in matches:
        # 移除可能的开头左括号
        clean_url = match.lstrip('(')
        unique_urls.add(clean_url)

# 输出结果
for url in sorted(unique_urls):
    print(url)

运行后会输出:

https://example.foo.com/url/path/site.js
https://exampel2.fooo.io/unique/bundle.js

注意事项:

  • 对于示例中出现的ttps://(缺少h)的错误URL,上述正则不会匹配它。如果需要兼容这种笔误,可以将正则开头改为h?ttps?://,但根据你的目标结果,这部分应该是输入笔误,所以默认忽略。
  • 如果是在数据库中处理(比如PostgreSQL的regexp_match函数),可以调整用法,核心正则逻辑一致。

内容的提问来源于stack exchange,提问作者Gerg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 13:38:22