1
ls 
[cc]a.txt bba.txt [cc]b.txt bbb.txt

ipython

glob.glob("[cc]*")
[]
glob.glob("bb*")
['bba.txt','bbb.txt']
glob.glob("[bb]*")
['bba.txt','bbb.txt']

怎么能得到[cc]a.txt[cc]b.txt匹配?[中的 char[bb]*似乎没有任何意义。像这样使用:

glob.glob("\[cc\]*")
[]

也是 NULL

4

2 回答 2

5

附在. [_ ]_[]

重击:

test $ ls
[cc]a.txt test.dat  test.gp   test.py

Python:

>>> glob.glob(r'[[]cc[]]*.txt') #yuck ...
['[cc]a.txt']

就通配而言,[ something]意味着匹配方括号之间的任何字符。so[cc]*.txt相当于c*.txtwhich 不是你想要的。

当然,更强大的解决方案是停止命名包含 glob 字符的文件 ;^)。

于 2012-08-30T14:16:05.463 回答
3

不幸的是,您不能简单地转义 *、?、[、] 字符。授予http://bugs.python.org/issue8402

最终被调用的 fnmatch.translate 的文档说:没有办法引用元字符。对不起。

正如 mgilson 所解释的那样,解决方案更复杂。

于 2012-08-30T14:19:24.437 回答