2016-09-22 3 views
0

у меня есть пункт следующим образом (Это пример paragraph- в моих других образцах слова и буквы остаются теми же, и только изменение числа):Java регулярное выражение удаления последнего значения неожиданно

blablabla 

Reflux Table - Day1 
Total Upright Supine Meal PostPr Cough 
Duration of Period (d,hh: mm) 23:13 14:05 09:08 00:48 05:59 00:15 
Number of Refluxes 56 56 0 1 32 1 
Number of Long Refluxes>5 (min) 1 1 0 0 0 0 
Duration of longest reflux (min) 5 5 0 0 4 1 
Time pH <4 (min) 66 66 0 0 40 1 
Fraction Time pH <4 (%) 4.8 0.0 11.3 3.6 

some more text blablaotherStuff 

Я хочу извлечь следующий пункт

Reflux Table - Day1 
Total Upright Supine Meal PostPr Cough 
Duration of Period (d,hh: mm) 23:13 14:05 09:08 00:48 05:59 00:15 
Number of Refluxes 56 56 0 1 32 1 
Number of Long Refluxes>5 (min) 1 1 0 0 0 0 
Duration of longest reflux (min) 5 5 0 0 4 1 
Time pH <4 (min) 66 66 0 0 40 1 
Fraction Time pH <4 (%) 4.8 0.0 11.3 3.6 

Для этого у меня есть следующий код:

Pattern ReflDay1_pattern = Pattern.compile("Reflux Table - Day1 .*?Fraction Time[^\n]*",Pattern.DOTALL); 
Matcher matcherReflDay1_pattern = ReflDay1_pattern.matcher(s); 
ArrayList<String> ReflDay1_arr = new ArrayList<String>(); 

     try { 
      while (matcherReflDay1_pattern.find()) { 
     ReflDay1_arr.add(matcherReflDay1_pattern.group(0)); 
     System.out.println("matcherReflDay1_pattern.group(0)"+matcherReflDay1_pattern.group(0)); 
               } 
      } 

     catch (Exception e) { 
        e.printStackTrace(); 
        } 

Howev Этот результат отбрасывает последнее значение, так что я теряю «3.6». Это происходит в любом пункте, который я пытаюсь сделать. Как я могу убедиться, что он включен? Это регулярное выражение (я проверил регулярное выражение и он извлекает то, что он должен извлечь, включая значение 3.6)?

Reflux Table - Day1 
Total Upright Supine Meal PostPr Cough 
Duration of Period (d,hh: mm) 23:13 14:05 09:08 00:48 05:59 00:15 
Number of Refluxes 56 56 0 1 32 1 
Number of Long Refluxes>5 (min) 1 1 0 0 0 0 
Duration of longest reflux (min) 5 5 0 0 4 1 
Time pH <4 (min) 66 66 0 0 40 1 
Fraction Time pH <4 (%) 4.8 0.0 11.3 
+0

Ваш код отлично работает в моей среде. – saka1029

+0

Можете ли вы рассказать, как вы передаете строку в методе matcher? Я имею в виду, как построить строку из данных, которые вы показываете, я считаю, что она имеет разделители. Правильно? – mhasan

+0

Вы код работает человек – passion

ответ

1

Моя гипотеза состоит в том, что линия окончаний фактически "\r\n" (Windows), но только что 3,6 была написана как "\n 3.6" или таковой. Блокнот показал бы, что он находится на одной линии.

Pattern ReflDay1_pattern = Pattern.compile(
     "Reflux Table - Day1 .*?Fraction Time[^\r\n]*\n[^\r\n]*", Pattern.DOTALL); 

Использование \r также предотвращает этот символ плестись строку.

String g = matcherReflDay1_pattern.group(0).replaceAll("\r?\n", " "); 
0

Я пробовал это из вашего фрагмента кода, и он отлично работает !!!

import java.io.BufferedReader; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Parser { 

    public static void main(String[] args) throws Exception { 
     FileInputStream f = new FileInputStream("C:\\Users\\NPGM81B\\Desktop\\text.txt"); 
     Pattern ReflDay1_pattern = Pattern.compile(
       "Reflux Table - Day1 .*?Fraction Time[^\n]*", Pattern.DOTALL); 
     Matcher matcherReflDay1_pattern = ReflDay1_pattern.matcher(getStringFromInputStream(f)); 
     ArrayList<String> ReflDay1_arr = new ArrayList<String>(); 

     try { 
      while (matcherReflDay1_pattern.find()) { 
       ReflDay1_arr.add(matcherReflDay1_pattern.group(0)); 
       System.out.println("matcherReflDay1_pattern.group(0) : " 
         + matcherReflDay1_pattern.group(0)); 
      } 
     } 

     catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    // convert InputStream to String 
    private static String getStringFromInputStream(InputStream is) { 

     BufferedReader br = null; 
     StringBuilder sb = new StringBuilder(); 

     String line; 
     try { 

      br = new BufferedReader(new InputStreamReader(is)); 
      while ((line = br.readLine()) != null) { 
       sb.append(line); 
      } 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      if (br != null) { 
       try { 
        br.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 

     return sb.toString(); 

    } 


} 

text.txt 
------------- 
Reflux Table - Day1 
Total Upright Supine Meal PostPr Cough 
Duration of Period (d,hh: mm) 23:13 14:05 09:08 00:48 05:59 00:15 
Number of Refluxes 56 56 0 1 32 1 
Number of Long Refluxes>5 (min) 1 1 0 0 0 0 
Duration of longest reflux (min) 5 5 0 0 4 1 
Time pH <4 (min) 66 66 0 0 40 1 
Fraction Time pH <4 (%) 4.8 0.0 11.3 3.6 
Смежные вопросы