2010-09-21 91 views
1

鉴于dmidecode解析的dmidecode红宝石

Handle 0x0025, DMI type 13, 22 bytes 
BIOS Language Information 
    Installable Languages: 1 
    en|US|iso8859-1 
    Currently Installed Language: en|US|iso8859-1 

Handle 0x0026, DMI type 16, 15 bytes 
Physical Memory Array 
    Location: System Board Or Motherboard 
    Use: System Memory 
    Error Correction Type: Single-bit ECC 
    Maximum Capacity: 16 GB 
    Error Information Handle: Not Provided 
    Number Of Devices: 4 

输出现在我正在寻找一个正则表达式/红宝石组合或别的东西来获得类似于

{ "BIOS Language Information" => 
    { "Installable Languages" => "1\n en|US|iso8859-1", 
     "Currently Installed Language" => "en|US|iso8859-1"}, 
    "Physical Memory Array" => 
    { "Location" => "System Board Or Motherboard", 
     "Use" => "System Memory"} } 
+1

的数据结构你可以使用'StringScanner'和正则表达式来标记它,并从那里工作 – NullUserException 2010-09-21 14:10:06

回答

1
Hash[ 
    text.scan(/^(?:(\S.*?)\n((?: +.+\n?)+))/).map { |a,b| 
     [a, 
     Hash[ 
       b.scan(/ (.+?): (.+(?:(?:\n .+))*)/) 
      ] 
     ] 
    } 
] 
+0

非常感谢Nakilon。但是你的代码无法工作。但我明白你想说什么。 我正在寻找使用Ragel的解决方案。我会很快在这里发布结果。 – zzeroo 2010-09-27 18:50:59

+0

我想,我的解决方案不起作用,因为将原始数据粘贴到SO上可能会有点困难而没有任何更改。我的解决方案适用于我在某个问题中看到的内容。 – Nakilon 2010-09-28 05:47:16