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

Python中使用glob模块能否匹配分组或可选分组的文件名?

问题解答

1. DigitalOcean测试工具和Python自带glob的规则差异

两者的规则存在明显差异。DigitalOcean的glob测试工具默认支持扩展glob语法(extglob),包含可选分组、多模式匹配等增强特性,而Python标准库的glob模块仅支持最基础的glob语法,不包含任何扩展语法支持。

2. Python glob是否支持圆括号可选分组

不支持。Python原生glob仅支持三类匹配规则:

  • *:匹配任意数量的非路径分隔符字符
  • ?:匹配单个非路径分隔符字符
  • []:匹配指定范围内的单个字符
    你写法中的?(_Student[A-Z])在Python glob中会被识别为普通字符序列,需要文件名严格包含?、(、)这三个符号才能匹配,自然无法命中你的目标文件。

3. 替代解决方案

你可以根据需求选择两种方案:

方案1:多glob模式合并

如果规则简单,可以拆分出两个glob模式分别匹配两种场景,再合并结果:

# 匹配不带_Student后缀的文件
pattern1 = "MM05_submissions/MM05_*[a-z0-9].py"
# 匹配带_Student后缀的文件
pattern2 = "MM05_submissions/MM05_*[a-z0-9]_Student[A-Z].py"
# 合并结果去重
matched_files = set(current_path.glob(pattern1)) | set(current_path.glob(pattern2))

for file in matched_files:
    # 执行业务逻辑
方案2:使用正则表达式匹配

如果规则复杂,建议遍历目录后用正则匹配文件名,精准度更高:

import re
from pathlib import Path

# 定义匹配规则
file_pattern = re.compile(r"^MM05_.+[a-z0-9](_Student[A-Z])?\.py$")
current_path = Path("./MM05_submissions")

for file in current_path.iterdir():
    if file.is_file() and file_pattern.match(file.name):
        # 执行业务逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:57:05