正则表达式(Java)

时间:2012-07-12 22:27:38

标签: java regex expression

我的收藏集List<String> sentencesList = new ArrayList<String>包括来自文字https://gist.github.com/c9afbb46abd50a28ef6e的句子 我只能用问号处理句子。所以,我正在收集我的收藏中的每个元素,我正在通过正则表达式检查

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

在文中有九个句子用问号标记,但它只适用于一个句子:

  

他本人是一个非常老的男人,头发蓬松,长着毛   他的大部分脸和头部,他们几乎喜欢他   一旦;但是在第一个晚上,当他出来迎接他们的时候   前门他太奇怪了,露西(谁是最小的)是   有点害怕他,而埃德蒙(他是下一个最小的人)想要的   笑着不得不继续假装他正在捂着鼻子躲起来   它?

我想我的问题是经常性的进攻。请帮忙!感谢的!

P.S。正则表达式仅在疑问句是双行换行后才起作用。 :(

4 个答案:

答案 0 :(得分:1)

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

for(String sentence : sentencesList) {
    if (sentence.contains("?")){
        //Do something
    }
}

答案 1 :(得分:0)

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

答案 2 :(得分: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());
}

答案 3 :(得分:0)

仅用于问号:

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

您还可以将String regex = "(?<=[.!?])\\s*";用于. !?