【问题标题】:regular expression by question mark (Java)问号正则表达式(Java)
【发布时间】:2012-07-12 22:27:38
【问题描述】:

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

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

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

他自己是个很老的人,长着一头蓬乱的白发 他的大部分脸和头上,他们几乎喜欢他 一次;但在他出来迎接他们的第一天晚上, 前门他长得很奇怪,以至于露西(最小的那个) 有点怕他,埃德蒙(他是第二个最小的)想要 笑,不得不继续假装他在擤鼻涕躲起来 是吗?

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

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

【问题讨论】:

    标签: java regex expression


    【解决方案1】:

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

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

    【讨论】:

    • endsWith("?") 不适用于 “那是什么噪音?”这样的句子。露西突然说。
    • @RoddyoftheFrozenPeas 是的,但从 OP 正则表达式来看,我认为他/她的句子会类似于 那是什么噪音?
    • 基于正则表达式,但是如果您查看它们链接到的 github 文件,很明显有诸如“那是什么噪音?”之类的句子。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我以这种方式测试了你的正则表达式,它看起来工作正常,所以这可能是你使用它的方式,或者你的数据不正确。

      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());
      }
      

      【讨论】:

        【解决方案4】:

        仅问号:

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

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

        【讨论】:

        • 你认为你的正则表达式匹配的是什么?
        • 将符号放在方括号 String regex = "[?]" 中的最简单方法,但如果您需要 例如 在下一行的开头没有 extra spaces 的情况下逐行拆分字符串并且精确包含带有符号分隔符的字符串 - 您应该使用 String regex = "(?&lt;=[.!?])\\s*"
        猜你喜欢
        • 2023-03-29
        • 1970-01-01
        • 2012-03-19
        • 1970-01-01
        • 2015-12-29
        • 2017-03-27
        • 1970-01-01
        相关资源
        最近更新 更多