两次正则表达式

时间:2016-04-05 14:34:11

标签: c# regex

我有一个包含几百万行的文件。

每一行都是这样开始的:

2016/04/05 11:20:43.293

我想要一个正则表达式(或其他选项?)来获取两次之间的所有行。 (例如在11:20到11:25之间)

此外,如果可以匹配这些行中的一个或多个单词,那么这也是有帮助的。然而,也许正则表达式不是最好的方式呢?

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

您可以在此LINQ查询中使用DateTime.TryParseExactFile.ReadLines

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);