Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 匹配零或一个模式出现_Python_Glob - Fatal编程技术网

Python 匹配零或一个模式出现

Python 匹配零或一个模式出现,python,glob,Python,Glob,假设我有下一个文件: /path/to/file/a.png /path/to/file/a_match_me.png /path/to/file/a_dont_match_me.png 我想匹配2个文件 /path/to/file/a.png /path/to/file/a_match_me.png 但是不匹配/path/to/file/a\u dont\u match\u me.png 因此,我需要regexp,类似于/path/to/file/a[零或一次匹配].png 我可以使用py

假设我有下一个文件:

/path/to/file/a.png
/path/to/file/a_match_me.png
/path/to/file/a_dont_match_me.png
我想匹配2个文件

/path/to/file/a.png
/path/to/file/a_match_me.png
但是不匹配
/path/to/file/a\u dont\u match\u me.png

因此,我需要regexp,类似于
/path/to/file/a[零或一次匹配].png


我可以使用python中的
glob
library吗?

使用内置的python glob库很难做到这一点,但是可以使用第三方库做到这一点

python库可用于上述情况。完全公开,我是上述图书馆的作者

下面我们使用
GLOBSTAR
标志(
G
)来匹配具有
**
的多个文件夹,并使用
EXTGLOB
标志(
E
)来使用扩展的glob模式,例如
!()
它排除了文件名模式。我们使用
globfilter
命令,该命令可以过滤带有glob模式的完整路径名。它有点像
fnmatch
的过滤器,但不包含完整路径

from wcmatch import glob

files = [
    "/path/to/file/a.png",
    "/path/to/file/a_match_me.png",
    "/path/to/file/a_dont_match_me.png"
]

print(glob.globfilter(files, '**/a!(_dont_match_me).png', flags=glob.G | glob.E))

输出

['/path/to/file/a.png', '/path/to/file/a_match_me.png']
您还可以直接从文件系统全局访问这些文件:

from wcmatch import glob

glob.glob('**/a!(_dont_match_me).png', flags=glob.G | glob.E)

希望这能有所帮助。

输入数据是什么?一根绳子?还是命令的结果?请给我们看看。你能解释一下第一个文件要匹配的模式吗?任何第一个文件/行都可以吗?对于第二个文件,文件名中应始终包含“\u match\u me”?
glob.glob
在目录中查找与模式匹配的文件。我希望我的模式是
一个[零或一次匹配]
。它相当于regexp中的
a(_match_me){0,1}
,但它不适用于
glob
,您不能使用标准的fnmatch样式的shell glob(不同于bash的“extglob”扩展语法),而这些正是
glob
库所支持的。