我不确定我是否以正确的方式提出这个问题或使用正确的符号,但这就是我想做的事。
我已经完成了
$matches=$_|Select-String '(?smi)(\d*)\: (.*?)' -AllMatches | Foreach{$_.Matches}
Select-String返回类型[MatchInfo],并且Foreach删除该类型的Matches属性,类型为[System.Array]
$ matches是找到的每个匹配的[System.Text.RegularExpressions.Group]元素的数组,但我想要的是捕获组值结果的二维数组。
也就是说,我想要一个包含这样的元素的数组:
$whatiwant=
($matches[0].Groups[1].Value,$matches[0].Groups[2].Value),
($matches[1].Groups[1].Value,$matches[1].Groups[2].Value),
($matches[2].Groups[1].Value,$matches[2].Groups[2].Value),
($matches[3].Groups[1].Value,$matches[3].Groups[2].Value),
...
如何构建此数组?
感谢。
答案 0 :(得分:0)
这是我发现的一种方法。我不知道是否有更好的方法。
$whatiwant=Foreach($_ in $matches) {,@($_.Groups[1].Value, $_.Groups[2].Value)}
答案 1 :(得分:0)
我用这个: http://gallery.technet.microsoft.com/scriptcenter/New-PSObjectFromMatches-87d8ce87
它采用正则表达式参数,并从输入的匹配组生成自定义PS对象。