2

文字に基づいてトークン化する文字列があります,。ここでの問題は、文字列がこのようなものであるということです

-123 abc, 234 def (2,3,4), -456 zyx (4,5,6) and xyz (6,5,4), 789 final!

トークン化した後の出力は次のようになります...

-123 abc
234 def (2,3,4)
-456 zyx (4,5,6) and xyz (6,5,4)
789 final!

このための正規表現を書く方法は?TIA。

4

4 に答える 4

5

Tokenizerは機能しません。パーサーが必要です。正規表現はカウントが特に得意ではありません。これは、括弧で囲まれたブロックをコンマで終了する場所を決定するために必要なことです。

単純な再帰下降パーサーがあなたのケースで機能するはずです。あなたは空想を得て、ANTLRを試してみたいかもしれません。これは優れた強力なツールですが、例のような単純な表現にはおそらくやり過ぎです。

于 2012-09-05T13:18:31.933 に答える
0

数字を付けずに「、」でパターンマッチを試すことができます。

Pattern pattern = Pattern.compile("^[\\d][,]^[\\d]");
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
    //Here you know where you have the separating ,
    start = matcher.start();

または、「、」でトークン化するのはどうですか?の後にスペースが常にあることを願って、トークン化します。

String test = "-123 abc, 234 def (2,3,4), -456 zyx (4,5,6) and xyz (6,5,4), 789 final!";
String[] tokens = test.split(", ");
System.out.println(Arrays.toString(tokens));
于 2012-09-05T13:19:44.683 に答える
0

これは、次のように単純に機能する可能性があります。

var string = "-123 abc、234 def(2,3,4)、-456 zyx(4,5,6)and xyz(6,5,4)、789 final!";

var tokens = string.split('、'); console.log(tokens); </ p>

デモ: http: //jsfiddle.net/HQgV8/

于 2012-09-05T13:21:55.693 に答える
0

もう1つの方法は、

Pattern p = Pattern.compile(", +");
for(String my : p.split("-123 abc,      234 def (2,3,4),  -456 zyx (4,5,6) and xyz (6,5,4), 789 final!"))
System.out.println(my);

これにより、先頭に空白(1つ以上)が付いたコンマが検索されます。

于 2012-09-05T13:35:44.913 に答える