匹配路径中文件夹名称的模式,不包括匹配路径的块?

时间:2017-12-01 15:09:54

标签: python regex path directory pyinotify

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

我如何构建正则表达式呢?

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

>>> fnmatch.translate('*var*')
'(?s:.*var.*)\\Z'

我想用它来构建我的正则表达式。

匹配输入路径可以这样看:

  • 的/ var /日志/富/变种/酒吧
  • 的/ var /数/富/ avarb /酒吧
  • 的/ var /日志/ var /

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

  • 的/ var /登录
  • 的/ var /数/富/酒吧

根本问题是我必须将正则表达式提供给第三方模块pyinotify作为输入。我不能通过剥离初始路径段然后匹配剩余部分来解决这个问题......

1 个答案:

答案 0 :(得分:1)

你应该可以这样做negative look behind

(?<!^\/)var

正面和负面外观在做正则表达式时非常有用。 此处还有一个交互式示例,您可以通过视觉反馈了解它的工作原理:https://regex101.com/r/52sZjw/1 另一个例子https://regex101.com/r/F023eD/1/ 不完全确定如何使用fnmatch。看起来您最终可能会自己构建字符串,即用户输入将匹配您要排除的路径的一部分。