java - 正则表达式用于解析句子并跳过括号内容

标签 java regex parsing

我需要一个句子解析器。解析器根据白色字符分割完整的句子。它将括号内的完整内容视为单个单词(已解析的单词)。

输入句子:-

"This is the work (my real job) which is great."

所需输出:-

This 

is 

the 

work

(my real job)

which 

is 

great.

最佳答案

不确定是否有一个很好的方法来使用这个正则表达式从这样的句子中解析出单词。不管怎样,你可能需要迭代这个句子。我不认为 String.split() 会为你做这件事。只需编写一个循环来为您执行此操作,然后您就可以处理括号不匹配时的具体情况。例如,即使句子结束并且没有右括号,这也会假设所有内容都是一个单词:

     String s = "This is the work (my real job) which is great, and (also some stuff";

     ArrayList<String> words = new ArrayList<String>();
     Scanner sentence = new Scanner(s);
     boolean inParen = false;
     StringBuilder inParenWord = new StringBuilder();
     while(sentence.hasNext()) {
        String word = sentence.next();
        if(inParen) {
           inParenWord.append(" ");
           inParenWord.append(word);

           if(word.endsWith(")")) {
              words.add(inParenWord.toString());
              inParenWord = new StringBuilder();
              inParen = false;
           }
        }
        else {
           if(word.startsWith("(")) {
              inParen = true;
              inParenWord.append(word);
           }
           else {
              words.add(word);
           }
        }
     }

     if(inParenWord.length()>0) {
        words.add(inParenWord.toString());
     }


     for(String word : words) {
        System.out.println(word);
     }

它将输出:

This
is
the
work
(my real job)
which
is
great,
and
(also some stuff

或者使用模式/匹配器:

     String s = "This is the work (my real job) which is great, and (also somet stuff";

     ArrayList<String> words = new ArrayList<String>();

     Pattern p = Pattern.compile(" ?([^(][^ ]+|\\([^\\)]+\\)?)");
     Matcher m = p.matcher(s);

     while(m.find()) {
        words.add(s.substring(m.start(),m.end()).trim());
     }

     for(String word : words) {
        System.out.println(word);
     }

关于java - 正则表达式用于解析句子并跳过括号内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11916601/

相关文章:

java - 如果用户是第一次使用,如何显示不同的页面 (Android)

java - 解析短信的最佳方式是什么

javascript - 从JSON字符串获取数据,foreach,多个同类型

Java:如何以极高的性能进行基于位置 (x,y) 的索引?

java - Spring 找不到类路径中 * 的驱动程序类

javascript - 为什么使用正则表达式密码验证失败?

ruby - 如何在 ruby​​ 中用转义单引号替换单引号

regex - Emacs RegExp - 如何选择 CamelCase 单词?

c# - 对泥浆/交互式小说解析器应该采用的方法感到困惑

java - 错误 : Could not find or load main class com. mycompany.bazybazy.MainApp - 使用 JavaFX 的 Maven 项目