1

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

我将如何构建一个正则表达式来做到这一点?


我正在使用 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/日志
  • /var/log/foo/bar

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

4

1 回答 1

1

您应该能够像这样进行负面观察

(?<!^\/)var

在进行正则表达式时,正面和负面的看法都非常有用。这里还有一个交互式示例,因此您可以了解它如何与视觉反馈一起使用:https ://regex101.com/r/52sZjw/1 另一个示例 https://regex101.com/r/F023eD/1/ 不是完全确定如何将其与 fnmatch 一起使用。看起来您最终可能会自己构建字符串,也就是说,当用户输入将匹配您要排除的部分路径时。

于 2017-12-01T17:04:32.463 回答