我是正则表达式的新手,我不知道如何为我正在尝试做的这种模式设置正则表达式。
表达式应该在 Python 预提交脚本中,如果提交的文件匹配它,它将运行预提交 Hook 。
我的示例文件列表
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
我需要一个正则表达式模式来匹配属于以下目录模式的文件
- vars/prod*/mysql.yml
- vars/prod*/keys.yml
- vars/stage*/mysql.yml
- vars/stage*/keys.yml
我现在的努力是
vars/(prod*|stage*)/(mysql|keys).yml
这是严重错误的。任何帮助都会很棒。
最佳答案
您使用的 *
不正确。它是一个重复指示器,而不是一个多字符通配符;正则表达式语法中没有通用(可变长度)通配符。但是,有单字符通配符和准通配符。因此,例如,.*
匹配任何字符,零次或多次。 \S*
匹配零个或多个非空白字符。但是,在您的示例中,d*
连续匹配零个或多个 d
。与 e*
类似。
您需要使用一些东西来匹配额外的字符。在这种情况下,您需要零次或多次非空白字符,因此您应该使用 \S*
。您还应该转义 /
字符。当您指的是文字 .
而不是通配符时,您还需要转义 .
。:
vars\/(prod\S*|stage\S*)\/(mysql|keys)\.yml
关于用于匹配具有前缀的目录的正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33621520/