2012-08-08 156 views
1

我有一個命令的輸出,基本上列出了一堆鍵/值對裏面。輸出沒有明顯的格式,因此我認爲正則表達式是最好的方法。正則表達式捕獲鍵/值

輸出:http://pastebin.com/Hfu4nP3M

基本上,我需要存儲的鍵/值對(逗號分隔)從線21-30,並將它們存儲在地圖。

使用正則表達式可以做到這一點嗎?

謝謝。

+0

這看起來像JSON ......如果是這樣,但不建議你使用正則表達式... – npinti 2012-08-08 13:19:48

+0

它不驗證爲JSON,因爲沒有引號的字符串:( – Nick 2012-08-08 13:21:27

回答

1

我不知道如果這是你想要的,但既然你說你需要存儲的鍵/值對從線21-30(逗號分隔)這是

{memory, 
    [{total,38751504}, 
     {processes,13711212}, 
     {processes_used,13711198}, 
     {system,25040292}, 
     {atom,662409}, 
     {atom_used,653371}, 
     {binary,287088}, 
     {code,18209655}, 
     {ets,1358504}]}, 

我假設你想memory這都存儲在[...]後讀值。

要做到這一點,你可以使用類似

輸出

total->38751504 
processes->13711212 
... 
+0

正是我在找的,歡呼聲。 – Nick 2012-08-09 14:57:22

0

這可能需要一些清理 - 我不經常使用正則表達式,也從不使用Java。

嘗試使用正則表達式:

[{,][^",}]*?[,}] 

即:查找等於一個字符「{」或「」,然後找到無限的字符不「「」,‘}’或','直到找到一個字符等於「}」或「」。

要找到一個尚未打上引號的一切,與之相匹配的。

String s = p.match(); 
s = s.charAt(0) + '"' + s.substring(1, s.length() - 1) + '"' + s.charAt(s.length() - 1; 

然後把那回你的日誌中適當的位置。完成全部之後其中,您可以使用JSON來讀取日誌。

此外,您可能希望將您的日誌記錄在內存中,因此操作起來會更容易。

0

您可以逐行讀取輸出行,直到您使用String.equals()發現'{memory'爲好。 然後在以後的所有行,你可以做

String[] result = line.replaceAll("[\\[\\]}{ \t]|},", "").split(","); 
    System.out.println(result[0] + "," + result[1]); 
    if(line.contains("]")) 
     break;