2016-04-05 20 views
-2

Ich habe eine Datei mit ein paar Millionen Zeilen in ihnen.Regex zwischen zwei mal

Jede Zeile beginnt wie folgt aus:

2016/04/05 11:20:43.293 

ich einen regulären Ausdruck möchte alle Linien zu erhalten, die zwischen zwei Zeiten fallen (oder eine andere Option?). (zum Beispiel zwischen 11:20 und 11:25)

Auch wenn es möglich ist, ein oder mehrere Wörter in diesen Zeilen zu finden, wäre das auch hilfreich. Aber vielleicht ist eine Regex nicht der beste Weg, um dann zu gehen?

+0

Sie müssen mehr Proben zu Ihrer Frage hinzufügen. – Shafizadeh

+0

Sie sollten ein wenig mehr beschreiben, was Sie erreichen möchten. Geben Sie ein Beispiel für einige Eingabezeilen und wenige Zeilen der erwarteten Ausgabe an. – Icemanind

+0

Sie denken, Regex ist Ihre beste Lösung? Ihr Anwendungsfall ist nicht genau das Problem, das Regex zum Lösen geschaffen wurde. Was Sie erreichen wollen, können Sie mit sehr einfachem Skripting viel besser erreichen. – Louis

Antwort

0

könnten Sie verwenden DateTime.TryParseExact und File.ReadLines mit dieser LINQ-Abfrage:

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

Zuerst müssen Sie eine Regex verwenden:

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

die Spiele Datumzeit analysieren und überprüfen, ob die Zeit gültig ist:

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 
} 

Um die Zeit zu vergleichen Sie (wie beschrieben verwenden könnte in 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); 
} 
Verwandte Themen