2016-09-22 9 views
0

を最後の値を削除するJavaの正規表現は、私は(これは一例で単語や文字が同じと数字のみの変更まま私の他のサンプルでparagraph-)段落を持っている:次のように予期せず

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 

私がしたいです

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:私は、次のコードを持ってこれを行うには、次の段落

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 

を抽出私は '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"かのような書かれていたということです。メモ帳は同じ行にあると表示します。 \rを使用して

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

も、文字列を追うためにこの文字を防ぐことができます。

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 
関連する問題