0

List<String> sentencesList = new ArrayList<String>テキストからの文を含むコレクションがありますhttps://gist.github.com/c9afbb46abd50a28ef6e 疑問符のみで文を処理する必要があります。したがって、コレクション内の各要素を取得し、正規表現でチェックしています

for(String sentence : sentencesList) {
            int count = 0;
            if(sentence.matches("([^.!?]*)\\?")) { ... }
}

テキストには疑問符の付いた 9 つの文がありますが、機能するのは 1 つだけです。

彼自身は非常に年をとった男で、毛むくじゃらの白い髪が顔の大部分と頭の上に生えていて、彼らはほとんどすぐに彼を好きになりました。しかし、最初の夜、彼が正面玄関で彼らに会いに出てきたとき、彼はとても奇妙に見えたので、ルーシー(末っ子だった)は彼を少し恐れていました.エドマンド(次の末っ子)は笑いたがっていました.隠すために鼻をかんでいるふりをし続けなければならなかったのですか?

私の問題は正規表現だと思います。助けてください!ありがとう!

PS 正規表現は、疑問文の後ろが二重改行の場合にのみ機能します。:(

4

4 に答える 4

1

文のリストがある場合は、次のようにしてください。

for(String sentence : sentencesList) {
    if (sentence.contains("?")){
        //Do something
    }
}
于 2012-07-12T23:18:16.477 に答える
0

他のすべての文は、"What's that noise?" のような他の文の中にあるため、一致できません。ルーシーは突然言いました。(それはその一部にのみ一致します。文は実際にはドットで終わります)。また、最初の文も奇妙に思えます。ピーター・スーザンという名前の子供が 4 人いたことはありますか? エドマンドとルーシー。

于 2012-07-12T23:09:09.780 に答える
0

私はあなたの正規表現をこの方法でテストしましたが、うまく動作するように見えます。おそらく、それはあなたの使用方法であるか、データが正しくありません.

BufferedReader fr = new BufferedReader(new FileReader("d:\\testText.txt"));
String line = null;
List<String> lines = new ArrayList<String>();
while ((line = fr.readLine()) != null)
    lines.add(line);
// System.out.println(lines);
Pattern pattern = Pattern.compile("([^.!?]*)\\?");
for (String tmp : lines) {
    Matcher m = pattern.matcher(tmp);
    while (m.find())
        System.out.println(m.group());
}
于 2012-07-12T23:13:52.777 に答える
0

疑問符のみ:

String regex = "(?<=[?])\\s*"; 

また、と を使用String regex = "(?<=[.!?])\\s*";することもできます. !?

于 2019-01-10T14:52:52.737 に答える