2016-11-04 18 views
1

うまくいえば、これは短いです。質問以下のプログラムでは、3つのセットが垂直に整列した "pad.txt"という名前のメモ帳の文書からすべてのデータを正常に抽出しました「ID」の後に「名前」と「日付結合」が続き、そのパターンは一貫しています。.txtファイルからすべての日付を抽出する

は、メモ帳のドキュメントはこれをもっぱら構成されています でした1 名:ボブ 加入した日付:2014年1月12日 ID:2 名前:ジム・ 日付登録日:1993年8月21日 ID:3 名前:参加スティーブ 日:1-2の数字、スラッシュ、1-2の数字を再度、スラッシュ、そして2:2016年6月7日

私はまた、許容可能な日付形式を受け入れ、正規表現を定義していますYEAR日付の4桁。最初にワイルドカード文字 "。"を指定しました。 < - 日付が受理される前に、任意の文字の任意の数を言うだけでなく、私も、指定した日付の後にする欲張りな量指定子「」スター付きドット、

と私の主な目標「は。」このコードはONLY EXTRACT pad.txtファイル内のすべての日付、および文字列か何かでそれらを格納することです。..

パブリッククラスメイン{

public static void main(String args[]) throws Exception{ 

     StringBuilder builder = new StringBuilder(); 
    FileReader reader = new FileReader(new File("pad.txt")); 

//  Define valid date format via regex 
    String dateRegex = ".* (\\d{1,2})/(\\d{1,2})/(\\d{2,4}) .* "; 

     int fileContent = 0; 
//  iterate through entire notepad doc, until = 0 AKA (finished searching doc) 
    while((fileContent = reader.read()) !=-1){ 

     builder.append((char)fileContent); 

     }//encapsulating loop 
    reader.close(); 

    String extracted = builder.toString(); 
    System.out.println("Extracted: " + extracted); 
    System.out.println(); 

     Matcher m = null; 
//   Validate that file contents conform with 'dateRegex' 
     m = Pattern.compile(dateRegex).matcher(extracted);  
     if(m.find()){ 
     System.out.println("Entire group : " + m.group()); 
     } 
    } 
    } 

残念ながら、m.group() ;"グループ全体:6/07/2016" 前述のように、私の目標はすべての日付を抽出することですが、.matcherコールでのみ「全体グループ:6/07/2016 " 私の心の中では、日付の前と後に任意の量の文字が許されているので、一番下までスクロールして、最後の日付のみを見つけます。正規表現をそれは、最後のものだけでなく、すべての日付を引き出​​し、なぜ最後のものを引っ張っているのですか?

私はこれで執拗に試してみたとまあ、それは比較的簡単ですか...事前

答えて

1

おかげで把握することはできません。一度にすべての日付に一致する正規表現を書くことはできませんが、matcherは意図したとおりに使用することができます。つまり、find()trueを返すことがあります。 正規表現を変更して、両端の.*を削除する必要があります。次に、これを簡単に行うことができます:

StringBuilder dateListBuilder = new Stringbuilder(); 
while(m.find()){ 
    dateListBuilder.append(m.group()); 
} 
System.out.println(dateListBuilder.toString()); 
+0

AH!それは簡単なことでしたが、.groupの実装がやや間違っていなければならないことを知っていました。これで、私はさらに正規表現の理解を進歩させました:) – Keith

関連する問題