2016-04-05 10 views
-2

私は数百万行のファイルを持っています。2回の正規表現

すべての行は次のように起動します:私は正規表現たい

2016/04/05 11:20:43.293 

2倍の間に入るすべての行を取得するには(またはその他のオプションを?)。 (例えば11:20から11:25の間)

また、これらの行にある1つ以上の単語を照合することができれば、それも役立ちます。しかし、おそらく正規表現はそれに向かう最良の方法ではないでしょうか?

+0

質問にサンプルを追加する必要があります。 – Shafizadeh

+0

達成しようとしていることをもう少し説明してください。数行の入力と期待される出力の数行の例を挙げてください。 – Icemanind

+0

あなたは正規表現があなたの最善の解決策だと思いますか?あなたのusecaseは正規表現の問題を解決するために作られたものではありません。あなたが達成しようとしていることは、非常に簡単なスクリプトを使ってずっと良いことができます。 – Louis

答えて

0

あなたは使用することができDateTime.TryParseExactFile.ReadLinesとLINQクエリ:

string format = "yyyy/MM/dd HH:mm:ss.fff"; 
DateTime dt; 
var relevantLines = File.ReadLines(path) 
    .Where(l => l.Length >= format.Length 
     && DateTime.TryParseExact(l.Substring(0, format.Length), format, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out dt) 
     && dt.TimeOfDay >= start && dt.TimeOfDay <= end); 
0

まずあなたが正規表現を使用する必要があります:日時に試合を解析し、時間が有効であるかどうかを確認

Regex TimePattern = new Regex("\\d{2}:\\d{2}.\\d{3}"); 

を:

foreach (Match M in TimePattern.Matches(FILECONTENT)) 
{ 
    DateTime Dt = Convert.ToDateTime(M.groups[1])); 
    //Now you can check if the time "Dt" is between 11:20 and 11:25 
} 

あなたが使用できる時間を比較するために(で説明したようにIs there BETWEEN DateTime in C# just like SQL does?):

public static bool Between(DateTime input, DateTime date1, DateTime date2) 
{ 
    return (input > date1 && input < date2); 
}