0

我正在抓取 Web 请求响应以提取 html 代码中保存的信息,该代码重复几次,因此使用选择字符串而不是匹配。我的代码看起来像

$regexname = '\(\w{0,11}).{1,10}\'
$energenie.RawContent | select-string $regexname -AllMatches | % {$_.matches}

返回看起来像:

Groups : {<h2 class="ener">TV </h2>, TV}
Success : True
Captures : {<h2 class="ener">TV </h2>}
Index : 1822
Length : 33
Value : <h2 class="ener">TV </h2>

Groups : {<h2 class="ener">PS3 </h2>, PS3}
Success : True
Captures : {<h2 class="ener">PS3 </h2>}
Index : 1864
Length : 33
Value : <h2 class="ener">PS3 </h2>

我无法锻炼一种方法来获取组的第二个元素,例如 TV 或 PS3:

$energenie.RawContent | select-string $regexname -AllMatches | % {$_.matches.groups}

给出一个奇怪的输出

保罗

4

2 回答 2

1

这应该有效:

$energenie.RawContent | 选择字符串 $regexname -AllMatches | ForEach-Object { 写入主机 $_.Matches.Groups[1].Value }

于 2015-10-25T22:33:56.857 回答
0

要获取集合中的第二项,请使用数组索引运算符:您想要从中获取值的索引[n]在哪里。n

对于 中的每个条目Matches,您希望Groups属性中的第二个条目是:

$MyMatches = $energenie.RawContent | select-string $regexname -AllMatches | % {$_.Matches}
$SecondGroups = $MyMatches | % {$_.Groups[1]}

要仅获取捕获的值,请使用以下Value属性:

$MyMatches | % { $_.Groups[1].Value }
于 2015-10-25T17:07:38.487 回答