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

如何用正则表达式提取URL中可位于中间或末尾的目标片段?

适配三种URL格式的正则提取方案

你当前的正则表达式因为强制要求目标片段后必须有斜杠/,所以无法匹配第三种无尾斜杠的URL。可以通过以下两种方式修改正则,实现三种格式的兼容:

方案一:将末尾斜杠设为可选

使用[^/]+精准匹配目标片段(匹配所有非斜杠字符),并通过/?让末尾斜杠变为可选:

import re

urls = [
    "https://www.example.com/d/abcd-1234/edit",
    "https://www.example.com/d/abcd-1234/",
    "https://www.example.com/d/abcd-1234"
]

# 修改后的正则
pattern = r'https://www.example.com/d/([^/]+)/?'
for url in urls:
    match = re.search(pattern, url)
    if match:
        print(match.group(1))  # 三个URL都会输出abcd-1234

正则说明:

  • [^/]+:匹配任意数量的非斜杠字符,正好对应你需要提取的abcd-1234片段
  • /?:表示末尾的斜杠是可选的(允许出现0次或1次)

方案二:精准匹配到斜杠或字符串结尾

如果需要更严格的匹配,确保提取的是d/之后到下一个斜杠或字符串结尾的内容,可以用非捕获组限定匹配边界:

pattern = r'https://www.example.com/d/([^/]+)(?:/|$)'

这里(?:/|$)是一个非捕获组,只会匹配斜杠或者字符串结尾,不会捕获该部分内容,避免干扰目标片段的提取。

注意事项

推荐用[^/]+代替原正则中的.+?,因为.+?是惰性匹配任意字符,在复杂URL场景下可能意外匹配到不需要的内容,而[^/]+的匹配范围更精准,完全符合目标片段的字符规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:22:18