Powershell使用正则表达式创建新的哈希表对象

时间:2010-07-13 04:55:07

标签: regex powershell

我正在尝试解析包含此格式文本块的文件(可能有1-n个):

-----------------------------------------------------------
KB Article Number(s): 2028769, 2072493, 2120979, 2143880, 2163958, 2163980, 980653, 980883, 981155, 981867, 982321, 982850
Language: All (Global)
Platform: x64
Location: (http://foo.bar.com)
Password: foo
-----------------------------------------------------------

如果有人有兴趣,该文本来自MS Hotfix请求电子邮件。

我有以下powershell一个班轮:

 $file | select-string "(?<Name>\w+):(?<Value>.*)" -allmatches | SELECT @{N="Name";E={$_.Matches[0].Groups[1].Value}}, @{N="Value";E={$_.Matches[0].Groups[2].Value}}

这给了我一组平面的名称值对,我希望它返回一个哈希表数组,其中每个5个密钥都已填充。

我不确定问题是我的正则表达式还是我如何访问匹配(必须有一个不那么冗长的方法来挑选这些)。

1 个答案:

答案 0 :(得分:4)

它不漂亮,但我认为它对你有用:

$ht = @{}
$file | %{if ($_ -match '(?<Name>[^:]+):(?<Value>.*)') {
          $ht.($matches.Name) = $matches.Value.Trim()} `
          elseif ($ht.Count) {$ht;$ht.Clear()}}

使用-match运算符有点简单,因为您可以直接使用$ matches变量,而无需通过Select-String的MatchInfo.Matches属性。顺便说一下我假设这里$ file是通过调用Get-Content来填充的,即每一行都是一个字符串数组中的字符串。