0

私は次のようなテキストを持っています

"SimpleKey1: word1. SimpleKey2Word1 SimpleKey2Word2: word word word, word word. word word. CompoundKey3 / CompoundKey3: word word word, word. Key3: word. CompoundKey4Word1 CompoundKey4Word2 / CompoundKey4Word3 CompoundKey4Word4: word words, words word-word (word 18 word 100 ). CompoundKey5 / CompoundKey5: word word."

次のようなキー/値マップを取得するには、その文字列を解析する必要があります。

SimpleKey1: word1. 
SimpleKey2Word1 SimpleKey2Word2: word word word, word word. word word. 
CompoundKey3 / CompoundKey3: word word word, word. 
CompoundKey4Word1 CompoundKey4Word2 / CompoundKey4Word3 CompoundKey4Word4: word words,    words word-word (word 18 word 100 ).  
CompoundKey5 / CompoundKey5: word word.

キーにはスラッシュ文字 (/) を含めることができ、値には特殊文字を含めることができることに注意してください。

どの正規表現を使えばいいのかわかりません。

ありがとう。

4

2 に答える 2

4
String data = "SimpleKey1: word1. SimpleKey2Word1 SimpleKey2Word2: word "
            + "word word, word word. word word. CompoundKey3 / CompoundKey3: "
            + "word word word, word. Key3: word. CompoundKey4Word1 "
            + "CompoundKey4Word2 / CompoundKey4Word3 CompoundKey4Word4: word "
            + "words, words word-word (word 18 word 100 ). CompoundKey5 / "
            + "CompoundKey5: word word.";
Pattern p=Pattern.compile("([\\w\\s/]+):(.*?)(?=$|([\\w\\s/]+):)");
Matcher m=p.matcher(data);
while(m.find())
    System.out.println(m.group().trim());

出力:

SimpleKey1: word1.
SimpleKey2Word1 SimpleKey2Word2: word word word, word word. word word.
CompoundKey3 / CompoundKey3: word word word, word.
Key3: word.
CompoundKey4Word1 CompoundKey4Word2 / CompoundKey4Word3 CompoundKey4Word4: word words, words word-word (word 18 word 100 ).
CompoundKey5 / CompoundKey5: word word.

キーの使用を取得したい場合m.group(1)m.group(2)値については、次のように使用できます

while(m.find()){
    System.out.println("key=>"+m.group(1));
    System.out.println("value=>"+m.group(2));
}
于 2012-07-13T21:54:33.020 に答える
0

この正規表現を試してください(.+?)(?=\.\s*(([A-Z])|($)))

于 2012-07-13T21:50:34.320 に答える