1

以下のようなsshからの出力があります。以下の出力をJavaを使用してハッシュマップに解析したいと思います。どんな提案も役に立ちます...

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

4

3 に答える 3

3

正規表現はここでトリックを行う必要があります:

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"
于 2012-11-23T12:35:45.780 に答える
1

出発点としてこの正規表現を試してください:

([a-zA-Z][a-zA-Z ]*): (.*?)(( {2,})|$)

最初のグループはキーをキャプチャし、2番目のグループは値をキャプチャする必要があります。それは2つのことを前提としています:

1)値の後に少なくとも2つのスペースまたは行の終わりがあります。2)値の中に次々に2つのスペースが存在することはありません。

(これらの仮定が本当に正しいことが重要です。これらはあなたの例では正しいですが、入力に対して常に正しいことを確認する必要があります。)

上記の例に対してテストしましたが、機能しているようです。http: //regexpal.com/を試してください(機能させるには、上部のチェックボックス「^ $の改行で一致」を有効にする必要があります)

その正規表現に問題がない場合は、JavaAPIを使用PatternMatcherてハッシュマップを作成します。ああ、trim()最後に余分なスペースを取り除くには、一致したキーと値を使用する必要があります。

于 2012-11-23T12:26:31.343 に答える
0

いくつかの正規表現を作成してみてください。アイテムの多くはかなり明確に定義されているので、を使用して開始点と終了点をキャッチできますString.indexOf()。次に、を取得しsubstring()、ハッシュマップを作成します。

于 2012-11-23T12:11:35.430 に答える