[英]Plain text parsing using java
我有一個ssh的輸出,如下所示。 我想使用java將下面的輸出解析為hashmap。 任何建議都有幫助......
Name : mysql Relocations: (not relocatable)
Version : 5.1.61 Vendor: CentOS
Release : 4.el6 Build Date: Fri 22 Jun 2012 05:58:59 AM PDT
Install Date: Tue 13 Nov 2012 02:23:23 AM PST Build Host: c6b10.bsys.dev.centos.org
URL : http://www.mysql.com
Summary : MySQL client programs and shared libraries
我的輸出應該是一個類似的哈希映射
核心價值
名稱mysql
重新安置(不可重新定位)
版本5.1.61
發布4.el6
正則表達式應該在這里訣竅:
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
sb.append("Name : mysql Relocations: (not relocatable)\n");
sb.append("Version : 5.1.61 Vendor: CentOS\n");
sb.append("Release : 4.el6 Build Date: Fri 22 Jun 2012 05:58:59 AM PDT\n");
sb.append("Install Date: Tue 13 Nov 2012 02:23:23 AM PST Build Host: c6b10.bsys.dev.centos.org\n");
sb.append("URL : http://www.mysql.com\n");
sb.append("Summary : MySQL client programs and shared libraries\n");
Pattern p = Pattern.compile("([^\\r\\n:]+):\\s(.+?)(\\s{2,}|\\r\\n|\\r|\\n|$)");
Matcher m = p.matcher(sb.toString());
while(m.find()) {
String key = m.group(1).trim();
String value = m.group(2);
System.out.println(key + " = \"" + value + "\"");
}
}
哪個輸出:
Name = "mysql"
Relocations = "(not relocatable)"
Version = "5.1.61"
Vendor = "CentOS"
Release = "4.el6"
Build Date = "Fri 22 Jun 2012 05:58:59 AM PDT"
Install Date = "Tue 13 Nov 2012 02:23:23 AM PST"
Build Host = "c6b10.bsys.dev.centos.org"
URL = "http://www.mysql.com"
Summary = "MySQL client programs and shared libraries"
試試這個正則表達式作為起點:
([a-zA-Z][a-zA-Z ]*): (.*?)(( {2,})|$)
第一組應該捕獲鍵,第二組應該捕獲值。 它假設有兩件事:
1)在值之后至少有兩個空格或行的結尾。 2)在一個值內一個接一個地沒有兩個空格。
(重要的是這些假設確實如此。在您的示例中它們是正確的,但您需要驗證輸入始終是真的。)
我根據你上面的例子對它進行了測試,似乎有效,請嘗試: http : //regexpal.com/ (你需要在頂部啟用復選框“^ $ match at line break”以使其工作)
如果該正則表達式正常,請使用Java API中的Pattern
和Matcher
來構建您的hashmap。 啊,你應該trim()
匹配的鍵和值,以消除末尾的額外空格。
嘗試創建一些正則表達式。 由於許多項目定義得很好,您可以使用String.indexOf()
捕獲起點和終點。 然后獲取substring()
,並開發hashmap。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.