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

为何glob('*[jp][pn]g')生效但glob('*p[ng][df]')无效?解析glob的[]语法

Python glob模块[]语法规则与问题解析

先搞懂glob里[]的核心逻辑

  • []是单个字符的匹配范围,括号里的每个字符都是该位置的可选选项——比如[ab]只会匹配文件名中对应位置是a或者b的单个字符
  • 多个[]按顺序对应文件名里的不同字符位置,比如[ab][cd]会匹配ac、ad、bc、bd这四种双字符组合

分析你的两段代码

为什么第一段返回空列表?

你写的*p[ng][df]模式,拆解后是:

  1. *:匹配文件名开头任意长度的字符(包括空)
  2. p:必须紧跟一个p字符
  3. [ng]:p后面的字符必须是n或者g
  4. [df]:再后面的字符必须是d或者f

而你文件夹里的文件是png、jpg、pdf:

  • png的结构是p-n-g,最后一个字符是g,不符合[df]的要求,匹配不上
  • pdf的结构是p-d-f,p后面的字符是d,不符合[ng]的要求,匹配不上
  • jpg里根本没有p,直接被排除
    自然就返回空列表了。

为什么第二段能匹配到jpg和png?

你写的*[jp][pn]g模式,拆解后:

  1. *:匹配开头任意字符
  2. [jp]:对应位置是j或者p
  3. [pn]:下一个位置是p或者n
  4. g:最后必须是g

对应到文件:

  • jpg:[jp]选j,[pn]选p,加上最后的g,完美匹配jpg
  • png:[jp]选p,[pn]选n,加上最后的g,完美匹配png
    所以这两类文件都能被捞出来。

额外:如果想匹配png和pdf该怎么写?

如果你的需求是匹配文件夹里的png和pdf,有两种直观写法:

  1. 用[]精准匹配:*p[nd][gf]
    • 对应png的p-n-g:[nd]选n,[gf]选g
    • 对应pdf的p-d-f:[nd]选d,[gf]选f
  2. 用大括号枚举更清晰:*.{png,pdf}
    大括号{}用于直接列出多个完整后缀,可读性更强,glob默认支持这种写法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:13:12