匹配路径中文件夹名称的模式,从匹配中排除一部分路径?
Matching patterns for folder names in a path, excluding a chunk of the path from matching?
假设初始 (Unix) 路径 [段] 如 /var/log
。在此路径下,可能有一整棵目录树。用户使用 Unix shell 样式的通配符为文件夹名称提供模式,例如*var*
。遵循初始路径 [段] 下的模式的文件夹应使用给定完整路径作为输入的正则表达式进行匹配,即必须从匹配中排除初始路径段。
我将如何构建正则表达式来执行此操作?
我正在使用 Python,它提供 fnmatch
模块作为 part of its standard library。 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
提供正则表达式作为输入。我无法通过仅剥离初始路径段然后匹配其余部分来解决此问题...
你应该可以像这样negative look behind:
(?<!^\/)var
在做正则表达式时,正面和负面的后视都非常有用。
这里还有一个交互式示例,因此您可以了解它如何处理视觉反馈:https://regex101.com/r/52sZjw/1
另一个例子 https://regex101.com/r/F023eD/1/
不确定如何将其与 fnmatch 一起使用。看起来您最终可能会自己构建字符串,也就是说,当用户输入将匹配您要排除的部分路径时。
假设初始 (Unix) 路径 [段] 如 /var/log
。在此路径下,可能有一整棵目录树。用户使用 Unix shell 样式的通配符为文件夹名称提供模式,例如*var*
。遵循初始路径 [段] 下的模式的文件夹应使用给定完整路径作为输入的正则表达式进行匹配,即必须从匹配中排除初始路径段。
我将如何构建正则表达式来执行此操作?
我正在使用 Python,它提供 fnmatch
模块作为 part of its standard library。 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
提供正则表达式作为输入。我无法通过仅剥离初始路径段然后匹配其余部分来解决此问题...
你应该可以像这样negative look behind:
(?<!^\/)var
在做正则表达式时,正面和负面的后视都非常有用。 这里还有一个交互式示例,因此您可以了解它如何处理视觉反馈:https://regex101.com/r/52sZjw/1 另一个例子 https://regex101.com/r/F023eD/1/ 不确定如何将其与 fnmatch 一起使用。看起来您最终可能会自己构建字符串,也就是说,当用户输入将匹配您要排除的部分路径时。