3

これを許可するように正規表現をフォーマットするにはどうすればよいですか?

正規表現は次のとおりです。 "\\b[(\\w'\\-)&&[^0-9]]{4,}\\b"

4 文字以上の単語を探します。

たとえば、記事を分割したい場合、区切られたすべての値と、それらの間のすべての値を最初に表示された順序で含む配列が必要です。次の文: 「私は新しい車を購入する必要があります。私は BMW を好むでしょう。」、分割からの私の望ましい結果は次のようになります。イタリック体の値は区切り記号です。

「私は」、「必要」、「〜」、「購入」、「新しい」、「車両」、「。私」、「だろう」、「」、「好む」、「BMW.」

そのため、4 文字を超えるすべての単語は 1 つのトークンですが、各区切り値の間のすべての単語も 1 つのトークンです (空白を含む複数の単語であっても)。区切られた値のみを変更し、空白、改行など、他のすべてを同じに保ちたい.

別のスレッドで、ルックアラウンドを使用してこれを機能させることができると読みましたが、正しくフォーマットできないようです。これを私が望むように動作させることさえ可能ですか?

4

2 に答える 2

3

あなたが何をしようとしているのかわかりませんが、少なくとも4文字の単語を変更したい場合は、このようなものを使用できます(=> 4文字の単語を大文字のバージョンに変更します)

String data = "I need to purchase a new vehicle. I would prefer a BMW.";
Pattern patter =  Pattern.compile("(?<![a-z\\-_'])[a-z\\-_']{4,}(?![a-z\\-_'])",
        Pattern.CASE_INSENSITIVE);
Matcher matcher = patter.matcher(data);

StringBuffer sb = new StringBuffer();// holder of new version of our
                                        // data
while (matcher.find()) {// lets find all words
    // and change them with its upper case version
    matcher.appendReplacement(sb, matcher.group().toUpperCase());
}
matcher.appendTail(sb);// lets not forget about part after last match

System.out.println(sb);

出力:

I NEED to PURCHASE a new VEHICLE. I WOULD PREFER a BMW.

または、置換コードを次のように変更した場合

matcher.appendReplacement(sb, "["+matcher.group()+"]");

あなたが得る

I [need] to [purchase] a new [vehicle]. I [would] [prefer] a BMW.

これで、そのような文字列をすべて分割[]て、目的の配列を取得できます。

于 2013-11-13T02:11:22.260 に答える
1

「単語」が として定義されていると仮定すると[A-Za-z]、次の正規表現を使用できます。

(?<=(\\b[A-Za-z]{4,50}\\b))|(?=(\\b[A-Za-z]{4,50}\\b))

完全なコード:

class RegexSplit{
    public static void main(String[] args){
        String str = "I need to purchase a new vehicle. I would prefer a BMW.";
        String[] tokens = str.split("(?<=(\\b[A-Za-z]{4,50}\\b))|(?=(\\b[A-Za-z]{4,50}\\b))");
        for(String token: tokens){
            System.out.print("["+token+"]");
        }
        System.out.println();
    }
}

この出力を取得するには:

[私は][新しい][車両][を[購入][する][必要][。私は][したい][][好き][BMW.]
于 2013-11-13T02:29:18.120 に答える