我在PowerShell中使用Regex制作了一个解析器,到目前为止它的效果非常好,除了我遇到的那个问题。
\s*([a-zA-Z_]+)\s*=(?:\s*"(.*)"|([^;#]*))
我已经使这个正则表达式成功地匹配了这些场景:
Name= "Value" ;Comment
将在=
之后的所有引号之间取消所有内容并忽略其余的
Name=Value ;Comment
将=
之后的所有内容转换为;
或#
作为值
现在这很好,但我遇到的问题是,一个场景将匹配为Value [2],场景二将匹配为Value [3]。这使我检查哪一个包含最终值的东西,我找不到干净,我确定没有必要。所以问题在于:Value [2]如何包含这两个不同组的结果? (使用完全不同的正则表达式不是问题,我已经多次重写过这个问题)
答案 0 :(得分:0)
使用命名的捕获组而不是非捕获组:
$pattern = '\s*([a-zA-Z_]+)\s*=(?<value>\s*"(.*)"|([^;#]*))'
$value = ($string |Select-String -Pattern $pattern).Matches.Groups['value'].Value.Trim(' "')