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

Python中如何用正则表达式提取URL中的文件名?

我来帮你搞定这个问题!首先注意到你提到的示例URL是https://example.net/img/src/img.jpg,要提取的应该是img.jpg(你可能手滑写成img1.jpg啦😉)。

用正则表达式提取文件名

核心思路是匹配URL路径中最后一个斜杠/之后的所有字符,这里给你两种常用的正则方案:

基础场景(URL无查询参数)

如果你的URL不会带?开头的查询参数,用这个简单的正则就够了:

import re

url = "https://example.net/img/src/img.jpg"
match_result = re.search(r'[^/]+$', url)
if match_result:
    filename = match_result.group()
    print(filename)  # 输出: img.jpg

正则解释:

  • [^/]:匹配任意不是斜杠的字符
  • +:表示匹配前面的字符至少一次(确保能拿到完整文件名)
  • $:锚定到字符串结尾,保证我们取的是路径的最后一段

进阶场景(URL带查询参数)

如果URL后面可能跟着查询参数(比如https://example.net/img/src/img.jpg?size=200),上面的正则会把img.jpg?size=200当成文件名。这时候可以调整正则,让它在遇到?时停止匹配:

import re

url = "https://example.net/img/src/img.jpg?size=200"
match_result = re.search(r'[^/]+?(?=\?|$)', url)
if match_result:
    filename = match_result.group()
    print(filename)  # 输出: img.jpg

正则解释:

  • (?=\?|$):正向预查,意思是“当遇到?或者字符串结尾时,停止匹配”,这样就能自动忽略后面的查询参数
额外推荐:不用正则的更简洁方案

其实在Python里,不用正则也能轻松解决这个问题,而且代码更直观、不易出错——毕竟正则虽然灵活,但处理路径这类结构化数据,用专门的工具更合适:

方案1:结合urlparse和os.path.basename

你已经用urlparse拿到了路径img/src/img.jpg,直接把这个路径传给os.path.basename()就能得到文件名:

from urllib.parse import urlparse
import os

url = "https://example.net/img/src/img.jpg"
parsed_path = urlparse(url).path
filename = os.path.basename(parsed_path)
print(filename)  # 输出: img.jpg

方案2:用现代的pathlib模块(Python 3.4+)

pathlib是Python 3.4引入的面向对象路径处理工具,代码更清晰易读:

from urllib.parse import urlparse
from pathlib import Path

url = "https://example.net/img/src/img.jpg"
parsed_path = urlparse(url).path
filename = Path(parsed_path).name
print(filename)  # 输出: img.jpg

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:26:04