私は数百万行のファイルを持っています。2回の正規表現
すべての行は次のように起動します:私は正規表現たい
2016/04/05 11:20:43.293
2倍の間に入るすべての行を取得するには(またはその他のオプションを?)。 (例えば11:20から11:25の間)
また、これらの行にある1つ以上の単語を照合することができれば、それも役立ちます。しかし、おそらく正規表現はそれに向かう最良の方法ではないでしょうか?
私は数百万行のファイルを持っています。2回の正規表現
すべての行は次のように起動します:私は正規表現たい
2016/04/05 11:20:43.293
2倍の間に入るすべての行を取得するには(またはその他のオプションを?)。 (例えば11:20から11:25の間)
また、これらの行にある1つ以上の単語を照合することができれば、それも役立ちます。しかし、おそらく正規表現はそれに向かう最良の方法ではないでしょうか?
あなたは使用することができDateTime.TryParseExact
とFile.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);
まずあなたが正規表現を使用する必要があります:日時に試合を解析し、時間が有効であるかどうかを確認
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);
}
質問にサンプルを追加する必要があります。 – Shafizadeh
達成しようとしていることをもう少し説明してください。数行の入力と期待される出力の数行の例を挙げてください。 – Icemanind
あなたは正規表現があなたの最善の解決策だと思いますか?あなたのusecaseは正規表現の問題を解決するために作られたものではありません。あなたが達成しようとしていることは、非常に簡単なスクリプトを使ってずっと良いことができます。 – Louis