如何用正则表达式提取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
相关产品推荐
相关产品推荐

