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

如何用Python风格正则提取URL路径最后部分(不含域名及后缀)

用Python提取URL路径最后部分(不带后缀和域名)

针对你的需求,这里给两种靠谱的实现方式:

方法一:正则表达式修正

你之前的正则问题出在:负向预查的位置不对,而且.png里的点没转义(正则里.匹配任意字符),导致没起到过滤后缀的作用。

修正后的正则可以直接匹配最后一个斜杠到.png之间的内容:

import re

url = 'https://ncd.soft.com/lags/prime-amazon.png'
# 匹配最后一个/后、.png前的内容,忽略结尾可选的/
match_result = re.search(r'/([^/.]+)\.png/?$', url)
if match_result:
    print(match_result.group(1))  # 输出 prime-amazon

正则说明:

  • /:定位到路径的最后一个斜杠
  • ([^/.]+):捕获除了/和.之外的所有字符(也就是不带后缀的文件名)
  • \.png:精确匹配后缀(转义.避免匹配任意字符)
  • /?$:允许URL结尾有可选的斜杠

方法二:用标准库解析URL(更推荐)

正则处理URL容易踩坑(比如遇到带参数、锚点的复杂URL),用Python自带的urllib.parse和os模块解析更稳妥:

from urllib.parse import urlparse
import os

url = 'https://ncd.soft.com/lags/prime-amazon.png'
# 解析URL得到路径部分
parsed_path = urlparse(url).path
# 提取路径最后一段文件名
filename = os.path.basename(parsed_path)
# 拆分文件名和后缀,取前面部分
result = os.path.splitext(filename)[0]
print(result)  # 输出 prime-amazon

为什么你的原正则失效?

你的正则([^/]+(?!.png))/?$中:

  1. [^/]+会匹配从最后一个斜杠到结尾的所有字符(也就是prime-amazon.png)
  2. (?!.png)是负向预查,它会检查当前位置后面有没有.png,但因为[^/]+已经匹配到了结尾,这个预查根本没起到过滤作用;而且.没转义,会匹配任意字符,逻辑本身就错了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:15:28