通俗易懂一点
为什么
PurePath("a/b.py").match("*.py") True 运行结果是True,单个"星号"成功匹配了a/b 。 不是说单个星号不能匹配斜杠的吗
PurePath("/a/b/c.py").match("a/**/*.py") False 运行结果是False,两个"星号"没有成功匹配 b/c。。 不是说两个星号可以匹配多级目录吗
通俗易懂一点
为什么
PurePath("a/b.py").match("*.py") True 运行结果是True,单个"星号"成功匹配了a/b 。 不是说单个星号不能匹配斜杠的吗
PurePath("/a/b/c.py").match("a/**/*.py") False 运行结果是False,两个"星号"没有成功匹配 b/c。。 不是说两个星号可以匹配多级目录吗
对于单个星号,不能匹配斜杠,你这个理解是对的,相当于只能匹配路径里最深的子目录文件。
也就是match从右向左进行匹配,只要PurePath中的路径与match里的特征一致就返回True。
如你说的第一个例子:
PurePath("a/b.py").match("*.py") ,
这里的“*”匹配的是b,而非a/b,你可以通过这个验证:
PurePath("c/a/b.py").match("c/*.py") , 运行为False。
PurePath("c/a/b.py").match("a/*.py"), 运行为True。
对于两个星号,它指的是当前目录及所有子目录,所以来看你这个例子:
PurePath("/a/b/c.py").match("a/**/*.py"),
此时当前路径是"/a/b/c.py",那么match中的**与* 进行匹配时,
按照从右向左规则,* 应该匹配c, **应该匹配的是/a/b,但是你的match
中前面还有个a/,所以返回了False,如果改成这样,就返回了True
PurePath("/a/b/c.py").match("**/*.py")。
你可以多写些例子,找找语感,good luck。
https://docs.python.org/3.6/library/pathlib.html?highlight=path#module-pathlib
https://docs.python.org/3.6/library/glob.html?highlight=glob#module-glob
这个是相关文档,关于match方法以及glob通配符这个模块内容,可以仔细阅读一下。