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

如何用正则表达式提取URL中最后一段(含扩展名)以外的内容

提取URL中除最后带扩展名的文件段之外的内容

嘿,我来帮你搞定这个正则表达式的需求!其实思路很简单——我们只需要匹配到URL中最后一个斜杠(包含)之前的所有内容,就能得到你想要的结果。下面给你两种靠谱的正则方案,还有一个非正则的简便方法作为备选。

方案一:捕获组匹配核心路径

这个正则通过捕获组直接提取我们需要的部分:

^(.*\/)[^\/]+\.\w+$

正则解释:

  • ^:锚定字符串的开头,确保从URL最开始匹配
  • (.*\/):这是我们要的捕获组,匹配任意字符直到最后一个斜杠(包含斜杠本身)
  • [^\/]+:匹配最后一段里的文件名(非斜杠的字符,至少一个)
  • \.\w+:匹配文件扩展名(点+至少一个字母/数字/下划线)

使用示例(Python):

import re
url = "http://stackoverflow.com/stuff/code/apple.jpg"
match_result = re.search(r'^(.*\/)[^\/]+\.\w+$', url)
if match_result:
    target_path = match_result.group(1)
    print(target_path)  # 输出:http://stackoverflow.com/stuff/code/

方案二:正向预查匹配(无需捕获组)

如果你不想用捕获组,可以试试正向预查的写法,直接匹配到目标内容:

^.*\/(?=[^\/]+\.\w+$)

正则解释:

  • ^.*\/:匹配从开头到最后一个斜杠的所有内容
  • (?=[^\/]+\.\w+$):正向预查,确保后面跟着的是「文件名+扩展名」的结构,避免误匹配

使用示例(Python):

import re
url = "http://stackoverflow.com/stuff/code/apple.jpg"
match_result = re.search(r'^.*\/(?=[^\/]+\.\w+$)', url)
if match_result:
    target_path = match_result.group()
    print(target_path)  # 输出:http://stackoverflow.com/stuff/code/

备选:非正则的简便方法

如果你的场景不需要正则,用字符串拆分可能更直观:

url = "http://stackoverflow.com/stuff/code/apple.jpg"
# 从右边按斜杠拆分1次,取前面的部分再加斜杠
target_path = url.rsplit('/', 1)[0] + '/'
print(target_path)

这几种方法都能处理任意层级的目录,不管你的图片在多少层嵌套里,都能准确提取到文件所在的父路径~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:14:08