正则表达式模式匹配带有前缀的目录

Mec*_*orm 7 regex git pre-commit-hook

我是一个正则表达式新手,我不知道如何为我正在尝试做的这个模式设置正则表达式。

该表达式应位于 Python 预提交脚本中,如果提交的文件与其匹配,它将运行预提交挂钩。

我的示例文件列表

vars/prod-region1/mysql.yml
vars/prod-region1/keys.yml
vars/prod-region1/test.yml
vars/stage-region2/mysql.yml
vars/stage-region2/keys.yml
vars/stage-region2/test.yml
vars/local/mysql.yml
vars/local/test.yml
Run Code Online (Sandbox Code Playgroud)

我需要一个正则表达式模式来匹配属于以下目录模式的文件

  • 变量/prod*/mysql.yml
  • 变量/prod*/keys.yml
  • 变量/阶段*/mysql.yml
  • 变量/阶段*/keys.yml

我现在的努力是

vars/(prod*|stage*)/(mysql|keys).yml
Run Code Online (Sandbox Code Playgroud)

这是严重错误的。任何帮助都会很棒。

eli*_*ide 5

你使用*方法不对。它是一个重复指示符,而不是多字符通配符;正则表达式语法中没有通用(可变长度)通配符。但是,存在单字符通配符和准通配符。例如,.*匹配任何字符零次或多次。\S*匹配零个或多个非空白字符。然而,在您的示例中,连续d*匹配零个或多个s。d与 类似e*

您需要使用一些东西来匹配附加字符。在这种情况下,您需要零次或多次非空白字符,因此您应该使用\S*. 您还应该逃避/角色。当您指的是文字.而不是通配符时,您.也需要转义:

vars\/(prod\S*|stage\S*)\/(mysql|keys)\.yml
Run Code Online (Sandbox Code Playgroud)

这是一个演示