2012-04-16 103 views
0

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

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){}; 
    } 
} 
+0

以上代码的结果是什么? – 2012-04-16 09:32:38

+3

有什么问题?另外,至少在你的catch块中打印堆栈跟踪:吞咽就像使你自己调试一样困难。 – 2012-04-16 09:33:30

+0

你是在说大括号'{}'还是括号'()'? – 2012-04-16 09:40:04

回答

2

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

+0

这似乎是做这个工作,谢谢! – TomSelleck 2012-04-16 10:32:08

+0

我将如何去捕捉()括号中的单词? – TomSelleck 2012-04-16 10:34:04

+0

提取字符串序列是另一回事 - 它将不得不是另一个正则表达式对从现在返回的字符串执行的字符串执行。这个内部正则表达式会是''\\ w +“' – 2012-04-16 10:46:01

3

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

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

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