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
库所支持的。