Powershell Regex - 可选的命名组匹配

Dav*_*eUK 7 regex powershell optional

假设我有一个字符串:

$string1 = "Hello_World:How, are, you:-all -is -well"
Run Code Online (Sandbox Code Playgroud)

我想使用正则表达式来匹配冒号分隔的字符串部分到命名组.例如:

$pattern = "(?<first>.*)\:(?<second>.*)\:(?<third>.*)"
Run Code Online (Sandbox Code Playgroud)

这个$模式会成功匹配$ string1,我最终会得到以下匹配:

first=Hello_World
second=How, are, you
third=-all -is -well
Run Code Online (Sandbox Code Playgroud)

这很好,但是有一个问题.$ string1可能缺少第三部分,例如:

$string1 = "Hello_World:How, are, you"
Run Code Online (Sandbox Code Playgroud)

不幸的是,这个$ string1不再匹配正则表达式模式.如何使模式匹配两种格式的字符串?(即我应该总是有一个"第一"和"第二"匹配,如果提供的话,只有一个"第三"匹配).

fge*_*fge 6

使用?量词和非捕获组.另外,不要使用.*!

(?<first>[^:]*):(?<second>[^:]*)(?::(?<third>.*))?
Run Code Online (Sandbox Code Playgroud)

此外,您应该至少在开始时锚定您的正则表达式.