0

この文字列を解析しようとしていますが、

"斬釘截鐵 斩钉截铁 [zhan3 ding1 jie2 tie3] /to chop the nail and slice the iron (idiom)/resolute and decisive/unhesitating/definitely/without any doubt/";

このコードで

private static final Pattern TRADITIONAL = Pattern.compile("(.*?) ");

    private String extractSinglePattern(String row, Pattern pattern) {
        Matcher matcher = pattern.matcher(row);
        if (matcher.find()) {
            return matcher.group();
        }
        return null;
    }

ただし、何らかの理由で、返される文字列の最後にスペースが含まれています

org.junit.ComparisonFailure: expected:<斬釘截鐵[]> but was:<斬釘截鐵[ ]>

私のパターンに何か問題がありますか?私も試しました

private static final Pattern TRADITIONAL = Pattern.compile("(.*?)\\s");

しかし無駄に

パターンの最後にある2つのスペースとのマッチングも試みましたが、一致しません(スペースが1つしかない)。

4

2 に答える 2

2

Matcher.group()次のように文書化されているものを使用しています。

前の一致と一致した入力サブシーケンスを返します。

試合にはスペースが含まれます。試合内のキャプチャグループはそうしませんが、あなたはそれを求めていません。

returnステートメントを次のように変更した場合:

return matcher.group(1);

それなら私はそれがあなたが望むことをするだろうと信じています。

于 2012-07-07T09:47:09.593 に答える
0

この正規表現を使用する(.+?)(?=\s+)

于 2012-07-07T09:48:10.013 に答える