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
相关产品推荐
相关产品推荐

