0

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

我弄完了

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

我该如何构建这个数组?

谢谢。

4

2 回答 2

0

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

$whatiwant=Foreach($_ in $matches) {,@($_.Groups[1].Value, $_.Groups[2].Value)}
于 2013-02-04T03:37:30.503 回答
0

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

它接受一个正则表达式参数,并从输入的匹配组中生成自定义 PS 对象。

于 2013-02-04T17:33:46.830 回答