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

Python正则表达式提取URL中指定斜杠间的字符串

解决URL路径片段提取问题

正则表达式方案

针对你的需求,推荐使用锚定URL开头的正则表达式,避免匹配到域名等无关内容:

^https?://[^/]+/([^/]+)(?:/([^/]+))?

正则说明:

  • ^https?://:匹配URL开头的http://或https://,确保从URL起始位置开始匹配
  • [^/]+:匹配域名部分(如www.happy.com),直到遇到第三个斜杠
  • /:匹配第三个斜杠
  • ([^/]+):第一个捕获组,提取第3-4个斜杠之间的内容(如de、sr、en)
  • (?:/([^/]+))?:可选的非捕获组,内部的/([^/]+)提取第4-5个斜杠之间的内容(如article、forum),?表示该部分可不存在(对应第二个URL的情况)

匹配结果示例:

URL捕获组1(第3-4斜杠内容)捕获组2(第4-5斜杠内容)
https://www.happy.com/de/article/98238811/poppersdearticle
https://www.happy.com/srsr空
https://www.happy.com/en/forum/ocean-livelinessenforum

更可靠的URL解析方案

如果处理大量或复杂URL(带参数、锚点等),用编程语言自带的URL解析工具比正则更稳定,以下是两种常见语言的实现:

Python 示例

from urllib.parse import urlparse

urls = [
    "https://www.happy.com/de/article/98238811/poppers",
    "https://www.happy.com/sr",
    "https://www.happy.com/en/forum/ocean-liveliness"
]

for url in urls:
    parsed_url = urlparse(url)
    # 拆分路径片段,去掉开头的斜杠
    path_segments = parsed_url.path.lstrip('/').split('/')
    lang_segment = path_segments[0] if path_segments else None
    section_segment = path_segments[1] if len(path_segments) >= 2 else None
    print(f"区域片段: {lang_segment}, 板块片段: {section_segment}")

JavaScript 示例

const urls = [
    "https://www.happy.com/de/article/98238811/poppers",
    "https://www.happy.com/sr",
    "https://www.happy.com/en/forum/ocean-liveliness"
];

urls.forEach(url => {
    const urlObj = new URL(url);
    // 拆分路径片段,去掉开头的斜杠
    const pathSegments = urlObj.pathname.slice(1).split('/');
    const langSegment = pathSegments[0];
    const sectionSegment = pathSegments[1] || null;
    console.log(`区域片段: ${langSegment}, 板块片段: ${sectionSegment}`);
});

为什么你的正则不行?

你之前用的[/]*[^/]+[/]([^/]+)没有锚定URL开头,会匹配任意位置的斜杠组合,导致误抓到域名部分(如www.happy)。而锚定开头的正则会跳过协议和域名,直接定位到路径的前两段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:41:43