0

我收集List<String> sentencesList = new ArrayList<String>了来自文本https://gist.github.com/c9afbb46abd50a28ef6e 的句子,我只能使用问号的句子。所以,我正在收集我的集合中的每个元素,并通过正则表达式进行检查

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

正文中有九个带问号的句子,但它只适用于一个:

他自己是个很老的人,蓬松的白头发长在他的大部分脸和头上,他们几乎立刻就喜欢上了他。但是第一个晚上,当他出来在前门迎接他们时,他的脸色很奇怪,以至于露西(最小的)有点害怕他,而埃德蒙(第二个最小的)想笑。还得继续假装擤鼻涕来掩饰?

我想我的问题是有规律的表现。请帮忙!谢谢!

PS 正则表达式仅在疑问句后为双换行时才有效。:(

4

4 回答 4

1

如果你有一个句子列表,为什么不这样做:

for(String sentence : sentencesList) {
    if (sentence.contains("?")){
        //Do something
    }
}
于 2012-07-12T23:18:16.477 回答
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

所有其他句子都无法匹配,因为它们在其他句子中,例如:“那是什么噪音?” 露西突然说。(它只会匹配其中的一部分,句子实际上以点结尾)。第一句话似乎也很奇怪:曾经有四个孩子叫彼得苏珊?埃德蒙和露西。

于 2012-07-12T23:09:09.780 回答
0

仅用于问号:

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

你也可以使用String regex = "(?<=[.!?])\\s*";. !?

于 2019-01-10T14:52:52.737 回答