如何获取对象数组并从这些对象中提取位以构建新数组?

时间:2013-02-04 01:36:42

标签: powershell

我不确定我是否以正确的方式提出这个问题或使用正确的符号,但这就是我想做的事。

我已经完成了

$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),
   ...

如何构建此数组?

感谢。

2 个答案:

答案 0 :(得分:0)

这是我发现的一种方法。我不知道是否有更好的方法。

$whatiwant=Foreach($_ in $matches) {,@($_.Groups[1].Value, $_.Groups[2].Value)}

答案 1 :(得分:0)

我用这个:  http://gallery.technet.microsoft.com/scriptcenter/New-PSObjectFromMatches-87d8ce87

它采用正则表达式参数,并从输入的匹配组生成自定义PS对象。