1

私は文字列を持っています:

Single line : Some text
Multi1: multi (Va1)    Multi2 : multi (Va2) Multi3 : multi (Val3)
Dots....20/12/2013 (EOY)

すべてのキーと値のペアを取得しようとしています。私の最初の試み

(1 行|複数[0-9]{1}|ドット)( *:? [.] *| *:? )(. )

動作しているように見えますが、1 行で複数のキーと値のペアを処理しません。これを達成する方法はありますか?

4

3 に答える 3

1

次のパターンを使用できます。

public static void main(String[] args) {

    String s = "Single line : Some text\n"
             + "Multi1: multi (Va1)    Multi2 : multi (Va2) "
             + "Multi3 : multi (Val3)\n"
             + "Dots....20/12/2013 (EOY)";

    String wd = "[^\\s.:]+(?:[^\\S\\n]+[^\\s.:]+)*";
    Pattern p = Pattern.compile("(?<key>" + wd + ")"
                              + "\\s*(?::|\\.+)\\s*"
                              + "(?<value>" + wd + "(?:\\s*\\([^)]+\\))?)"
                              + "(?!\\s*:)(?=\\s|$)");
    Matcher m = p.matcher(s);

    while (m.find()) {
        System.out.println(m.group("key")+"->"+m.group("value"));
    }
}
于 2013-07-19T16:09:44.003 に答える
0

正確な構文は覚えていませんが、次のようなものだと思います。

while (matcher.find()) {
  String match = matcher.group();
}

ここでの目標は、現在の行を繰り返し処理し、「まだ何かを見つけている間に、この行で一致した文字列を返してください」と伝える必要があることです。同じ行に複数の一致があるため、調査結果が引き続き表示されるはずです。参考として、Matcherの JavaDoc を次に示します。

残念なことに、これは Java がこの種のことにあまり適していないもう 1 つの理由です。誰かが私をダウンモッドする前に、言語ではなく Java API に対する批判として私が言っていることを理解しておいてください。

于 2013-07-19T16:07:24.150 に答える