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

如何使用re.findall提取/分隔路径的目录,支持//作为单个/字面量

正则提取路径分段解决方案

核心需求说明

  • 将路径中连续的/视为单个分隔符
  • 开头的连续斜杠对应第一个分段为单个/
  • 仅通过正则相关方法实现,不直接使用str.split处理

可行实现方案

方案1:先归一化再匹配(易读性高)

先把所有连续斜杠替换为单个,再提取分段:

import re
path = '///a//b/c///d'
# 归一化连续斜杠
normalized_path = re.sub(r'/+', '/', path)
# 提取所有分段
segments = re.findall(r'^/|[^/]+', normalized_path)
print(segments)
# 输出:['/', 'a', 'b', 'c', 'd']

方案2:单次re.findall实现(无预处理步骤)

利用零宽断言和捕获组,一次匹配得到结果:

import re
path = '///a//b/c///d'
segments = [m[0] if m[0] else m[1] for m in re.findall(r'^(/)|(?<=/)([^/]+)', path)]
print(segments)
# 输出:['/', 'a', 'b', 'c', 'd']

原写法问题说明

你之前尝试的正则是将斜杠序列和后续文件名绑定捕获,所以会保留连续斜杠的完整内容。上述方案通过后行断言匹配斜杠作为分隔标记,不会将斜杠本身纳入文件名分段的捕获结果,自动跳过了连续重复的斜杠。
如果需要接近你示例中的['/', 'a/b', 'c/', 'd']格式,只需在得到基础分段后按照业务规则拼接相邻分段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:15:03