Regex PowerShell正则表达式-尝试在字符串中匹配CamelCase标记

Regex PowerShell正则表达式-尝试在字符串中匹配CamelCase标记,regex,powershell,Regex,Powershell,我有一个基于以下内容的命名约定: 键入BusinessUnitAppNameEnvironment角色位置 例如:对于资源组: rg-BusunitDeployTstWorkload01-ae CamelCase令牌的数量是恒定的 我正在尝试构建一些正则表达式来验证格式。我的第一个正则表达式: ^rg-[A-Z][a-z_0-9]{3,}[A-Z][a-z]{3}(Dev|Prd|Stg|Tst|Dr)[A-Z][a-zA-Z_0-9]{3,}(-ae|-as)$ 匹配成功 但是,它也与故障情

我有一个基于以下内容的命名约定: 键入BusinessUnitAppNameEnvironment角色位置

例如:对于资源组: rg-BusunitDeployTstWorkload01-ae

CamelCase令牌的数量是恒定的

我正在尝试构建一些正则表达式来验证格式。我的第一个正则表达式:

^rg-[A-Z][a-z_0-9]{3,}[A-Z][a-z]{3}(Dev|Prd|Stg|Tst|Dr)[A-Z][a-zA-Z_0-9]{3,}(-ae|-as)$
匹配成功

但是,它也与故障情况相匹配:

rg-BusUNITDeployTstWorkload01-ae
如果我查看$Matches,我会看到:

Name                           Value
----                           -----
2                              -ae
1                              Tst
0                              rg-BusUNITDeployTstWorkload01-ae
我已经开始添加更多的括号分组,并尝试构建一些其他测试字符串,但我觉得我没有取得任何进展。例如:

"^rg-([A-Z][a-z_0-9]{3,})([A-Z][a-z]{3})(Dev|Prd|Stg|Tst|Dr)[A-Z][a-zA-Z_0-9]{3,}(-ae|-as)$"
屈服

PS> $Matches
Name                           Value
----                           -----
4                              -ae
3                              Tst
2                              ploy
1                              BusUNITDe
0                              rg-BusUNITDeployTstWorkload01-ae
我不明白为什么第一场比赛是一场比赛-它看起来像:

BusUNITDe -match ([A-Z][a-z_0-9]{3,}) # is true
-->这对我来说毫无意义

搜索web表明这是处理CamelCase的典型方法,因此我不确定这是PowerShell问题还是我的误解。我的钱在上面 选项2,但如果有人能给我指出正确的方向,我将不胜感激


提前谢谢

如果下面的正则表达式有效,请尝试它。如果你能举更多的例子,那就容易了

rg-([A-Z][a-z_0-9]+)+[0-9]+-ae
下面是我如何做到这一点的描述

rg-         to match first "rg-"
(           group start
[A-Z]       match the capital letter
[a-z_0-9]+  match lower case letters/digits (should be following capital letter)
)+          parenthesis close for group and repeat this group multiple times
[0-9]{2}    followed by 2 numbers 01
-ae         followed by -ae
我们可以通过以下方式使其更加严格:

rg-(([A-Z][a-z]+)+){4}[0-9]{2}-ae

它使用相同的主体,但计算大小写,后面跟一些字母4次,数字2次。这取决于您希望严格到什么程度。

-match不区分大小写,请使用
-cmatch
谢谢,这似乎是一个突破:)谢谢您的回复,是的,特定的regex可以工作(使用-cmatch)。我发现我缺少的元素是[a-z]后面的“+”。非常感谢你的帮助!