我有一个包含几百万行的文件。
每一行都是这样开始的:
2016/04/05 11:20:43.293
我想要一个正则表达式(或其他选项?)来获取两次之间的所有行。 (例如在11:20到11:25之间)
此外,如果可以匹配这些行中的一个或多个单词,那么这也是有帮助的。然而,也许正则表达式不是最好的方式呢?
答案 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.TryParseExact
和File.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);