2012-04-16 4 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

Каков результат приведенного выше кода? –

+3

В чем проблема? Кроме того, по крайней мере, распечатайте трассировку стека в своем блоке catch: проглатывание, как это делает сложную для вас отладку. –

+0

Вы говорите о скобках '{}' или скобки '()'? –

ответ

2

Строка регулярного выражения должна (по крайней мере) быть "[({\\[].*?[\\]})]" Внешние квадратные скобки представляют собой синтаксис регулярных выражений - вы определяете класс символов для поиска. Это не идеально, и вполне корректное решение невозможно в Java regex (вы не можете учитывать вложенные скобки). Но есть начало :) Кстати вам может показаться полезным экспериментировать с регулярным выражением с помощью Eclipse Find. У него даже есть отличная поддержка контента.

+0

Это, похоже, делает эту работу, спасибо! – TomSelleck

+0

Как я могу только захватывать слова в() круглых скобках? – TomSelleck

+0

Извлечение последовательности строк - это другое дело - это должно быть другое регулярное выражение, выполняемое по строкам, возвращенным из того, которое у вас есть сейчас. Это внутреннее регулярное выражение будет '' \\ w + "' –

3

Вы пропускаете каждую вторую строку. Прочитайте каждую строку один раз.

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

Я бы удалил блок try/catch, так как он ничего не полезен. Вместо этого вы можете использовать основной thorws IOException.

Смежные вопросы