【问题标题】:Extract words between parentheses提取括号之间的单词
【发布时间】:2012-04-16 09:31:13
【问题描述】:

我正在尝试解决一个相当简单的问题,但无法完全弄清楚如何正确使用正则表达式。我想从(括号)之间的文本文件中提取任何单词。这是我正在进行的尝试。任何朝着正确方向的推动都将不胜感激!

public class Reader {

    public static void main(String[] args) {
        List<String> matchList = new ArrayList<String>();
        Pattern regex = Pattern.compile("\\{([^}]*)\\}");

        try{
            BufferedReader bufferedReader = new BufferedReader(new FileReader("test2.txt"));

            while(bufferedReader.readLine()!=null)
            {
                String parseMe = bufferedReader.readLine();

                Matcher regexMatcher = regex.matcher(parseMe);

                while (regexMatcher.find()) 
                {
                    matchList.add(regexMatcher.group());
                } 
            }
            System.out.println(matchList);
        }catch(IOException e){};
    }
}

【问题讨论】:

  • 以上代码的结果是什么?
  • 有什么问题?另外,至少在你的 catch 块中打印堆栈跟踪:这样吞咽会让你自己很难调试。
  • 你说的是大括号'{}'还是括号'()'?
  • 当我运行这段代码时,我得到一个空列表。我还试图提取 ( ) 中的单词

标签: java regex string extract


【解决方案1】:

您正在跳过每一行。每行读一次。

String parseMe;
while((parseMe = bufferedReader.readLine()) != null) {
    Matcher regexMatcher = regex.matcher(parseMe);

我会删除 try/catch 块,因为它没有做任何有用的事情。你可以改用主thorws IOException

【讨论】:

    【解决方案2】:

    正则表达式字符串应该(至少)是"[({\\[].*?[\\]})]" 外部方括号是正则表达式语法——您正在定义要查找的字符类。它并不完美,在 Java 正则表达式中不可能有一个完全正确的解决方案(你不能考虑嵌套括号)。但是有一个开始:) 顺便说一句,您可能会发现使用 Eclipse Find 试验正则表达式很有用。它甚至有一个很棒的内容辅助。

    【讨论】:

    • 我将如何只捕获 ( ) 括号中的单词??
    • 提取字符串序列是另一回事——它必须是另一个正则表达式,该正则表达式对从您现在拥有的字符串返回的字符串执行。该内部正则表达式将是"\\w+"