我有一個命令的輸出,基本上列出了一堆鍵/值對裏面。輸出沒有明顯的格式,因此我認爲正則表達式是最好的方法。正則表達式捕獲鍵/值
輸出:http://pastebin.com/Hfu4nP3M
基本上,我需要存儲的鍵/值對(逗號分隔)從線21-30,並將它們存儲在地圖。
使用正則表達式可以做到這一點嗎?
謝謝。
我有一個命令的輸出,基本上列出了一堆鍵/值對裏面。輸出沒有明顯的格式,因此我認爲正則表達式是最好的方法。正則表達式捕獲鍵/值
輸出:http://pastebin.com/Hfu4nP3M
基本上,我需要存儲的鍵/值對(逗號分隔)從線21-30,並將它們存儲在地圖。
使用正則表達式可以做到這一點嗎?
謝謝。
我不知道如果這是你想要的,但既然你說你需要存儲的鍵/值對從線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
...
正是我在找的,歡呼聲。 – Nick 2012-08-09 14:57:22
這可能需要一些清理 - 我不經常使用正則表達式,也從不使用Java。
嘗試使用正則表達式:
[{,][^",}]*?[,}]
即:查找等於一個字符「{」或「」,然後找到無限的字符不「「」,‘}’或','直到找到一個字符等於「}」或「」。
要找到一個尚未打上引號的一切,與之相匹配的。
String s = p.match();
s = s.charAt(0) + '"' + s.substring(1, s.length() - 1) + '"' + s.charAt(s.length() - 1;
然後把那回你的日誌中適當的位置。完成全部之後其中,您可以使用JSON來讀取日誌。
此外,您可能希望將您的日誌記錄在內存中,因此操作起來會更容易。
您可以逐行讀取輸出行,直到您使用String.equals()發現'{memory'爲好。 然後在以後的所有行,你可以做
String[] result = line.replaceAll("[\\[\\]}{ \t]|},", "").split(",");
System.out.println(result[0] + "," + result[1]);
if(line.contains("]"))
break;
這看起來像JSON ......如果是這樣,但不建議你使用正則表達式... – npinti 2012-08-08 13:19:48
它不驗證爲JSON,因爲沒有引號的字符串:( – Nick 2012-08-08 13:21:27