2016-09-22 85 views
0

我有一個段落如下(這是一個例子我的其他樣本中的話中─和字母保持不變,只有數字的變化):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

你能告訴你如何通過匹配器方法傳遞字符串我的意思是如何從你顯示的數據構造字符串,我相信它有分隔符..對嗎? – 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 
相關問題