6

文を含む文字列があり、単語に基づいて半分に分割したいと考えています。(\\w+) word「単語」+「単語」自体の前のすべての単語を取得できると思った正規表現があり、最後の4文字を削除するだけです。

しかし、これはうまくいかないようです..私が間違ったことをしたアイデアはありますか?

ありがとう。

4

5 に答える 5

10

これはうまくいくようです:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("([\\w\\s]+) word");
        Matcher m = p.matcher("Could you test a phrase with some word");
        while (m.find()) {
            System.err.println(m.group(1));
            System.err.println(m.group());
        }
    }
}
于 2012-05-02T20:02:21.960 に答える
5

文字列操作の使用:

int idx = sentence.indexOf(word);
if (idx < 0)
  throw new IllegalArgumentException("Word not found.");
String before = sentence.substring(0, idx);

正規表現の使用:

Pattern p = Pattern.compile(Pattern.quote(word));
Matcher m = p.matcher(sentence);
if (!m.find())
  throw new IllegalArgumentException("Word not found.");
String before = sentence.substring(0, m.start());

または:

Pattern p = Pattern.compile("(.*?)" + Pattern.quote(word) + ".*");
Matcher m = p.matcher(sentence);
if (!m.matches())
  throw new IllegalArgumentException("Word not found.");
String before = m.group(1);
于 2012-05-02T20:04:16.550 に答える
3

単語の前後の文の各部分をトークン化する必要があります。

http://docs.oracle.com/javase/1.5.0/docs/api/

 String[] result = "this is a test".split("\\s"); //replace \\s with your word
 for (int x=0; x<result.length; x++)
     System.out.println(result[x]);
于 2012-05-02T19:57:22.397 に答える
2

これを試して:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("^.*?(?= word)");
        Matcher m = p.matcher("Everything before the word");
        while (m.find()) {
            System.out.println(m.group());
        }
    }
}

次のように分類されます。

.*? すべての

(?=前に

) 終わり

于 2012-05-02T20:06:57.977 に答える
0

その理由は+、貪欲な量指定子であり、指定した単語を含む文字列全体に一致するためです。

に変更すると、(\\w+?) word機能するはずです(消極的な量指定子)。数量詞とその正確な機能の詳細については、こちらを参照してください。

于 2012-05-02T20:02:56.270 に答える