簡體   English   中英

使用java進行純文本解析

[英]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中的PatternMatcher來構建您的hashmap。 啊,你應該trim()匹配的鍵和值,以消除末尾的額外空格。

嘗試創建一些正則表達式。 由於許多項目定義得很好,您可以使用String.indexOf()捕獲起點和終點。 然后獲取substring() ,並開發hashmap。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM