2

文字列をトークン化する正規表現を作成しようとしています。文字列の例は次のとおりです。

"hello world" Alexandros Alex "I Am" Something

私は応答を返す必要があります:

hello world
Alexandros
Alex 
I am
Something

明確にするために、スペースでトークン化しますが、引用符内の単語はトークン化しません。これが簡単な正規表現である場合は、事前に申し訳ありませんが、私は常にこれらに苦労しています。

4

3 に答える 3

2

あなたは試すことができます\b(?:(?<=")[^"]*(?=")|\w+)\b:これにより、実際の引用符が一致から除外されます。

import java.util.regex.*;
public class Test {
    public static void main(String...args) {
        String line = "\"hello world\" Alexandros Alex \"I Am\" Something";
        Pattern pattern = Pattern.compile("\\b(?:(?<=\")[^\"]*(?=\")|\\w+)\\b");
        Matcher matcher = pattern.matcher(line);
        while (matcher.find()) {
            System.out.println(matcher.group(0));
        }
    }
}

実行すると、次の出力が得られます。

$ javac Test.java
$ java Test
hello world
Alexandros
Alex
I Am
Something
于 2013-02-06T17:40:18.977 に答える
1

この正規表現は、引用符内の単語または文字列全体に一致します。"[^"]*"|\w*

この正規表現を使用してマッチャーを作成し、すべての一致を繰り返すことができます。ここでサンプルコードを見つけることができます

于 2013-02-06T17:36:19.920 に答える
0

分割したい場合は、バランスが取れているか確認してください"

今、明らかにスペースが""数の間にある場合は均等で"はないでしょう..これは以下regexが行うことです

\s(?=(?:([^"]*"[^"]*"[^"]*)*|[^"]*)$)
于 2013-02-06T17:42:27.467 に答える