Python 路径中文件夹名称的匹配模式,是否从匹配中排除路径块?

Python 路径中文件夹名称的匹配模式,是否从匹配中排除路径块?,python,regex,path,directory,pyinotify,Python,Regex,Path,Directory,Pyinotify,假设初始(Unix)路径[段]类似于/var/log。在这个路径下,可能有一整棵目录树。用户使用Unix shell样式的通配符提供文件夹名称模式,例如*var*。按照初始路径[段]下的模式的文件夹应使用给定完整路径作为输入的正则表达式进行匹配,即必须从匹配中排除初始路径段 我如何构建一个正则表达式来实现这一点 我正在使用Python,它提供了fnmatch模块fnmatch提供了一个translate方法,该方法将使用Unix shell样式通配符指定的模式转换为正则表达式: >>

假设初始(Unix)路径[段]类似于
/var/log
。在这个路径下,可能有一整棵目录树。用户使用Unix shell样式的通配符提供文件夹名称模式,例如
*var*
。按照初始路径[段]下的模式的文件夹应使用给定完整路径作为输入的正则表达式进行匹配,即必须从匹配中排除初始路径段

我如何构建一个正则表达式来实现这一点


我正在使用Python,它提供了
fnmatch
模块
fnmatch
提供了一个
translate
方法,该方法将使用Unix shell样式通配符指定的模式转换为正则表达式:

>>> fnmatch.translate('*var*')
'(?s:.*var.*)\\Z'
我想用它来构造正则表达式

匹配的输入路径可能如下所示:

  • /var/log/foo/var/bar
  • /var/log/foo/avarb/bar
  • /var/log/var/
不匹配的输入路径可能如下所示:

  • /var/log
  • /var/log/foo/bar

根本的问题是,我必须将正则表达式作为输入提供给第三方模块
pyinotify
。我无法通过剥离初始路径段,然后与剩余路径段进行匹配来解决此问题。

您应该可以这样做:

(?
在执行正则表达式时,正面和负面的lookbehind都非常有用。
此外,这里还有一个互动示例,您可以了解它是如何与视觉反馈一起工作的:
另一个例子
不确定如何将其与fnmatch一起使用。看起来您可能会自己构建字符串,也就是说,用户输入将匹配您要排除的部分路径

(?<!^\/)var