我尝试使用正则表达式从日志文件中查找日期和时间,如下所示:
Dec 25 14:11:03....
在日志文件中查找它们并计算日期和时间的最佳方法是什么 绝对值?
我正在尝试此代码,但它找不到表达式:
public long getDateAndgetTimeFromLog(TypeOfProtocols type, string lineOfLog)
{
long dnt = 0; //variable from date and time.
switch (type)
{
case TypeOfProtocols.PlinkSnifer:
if (Regex.IsMatch(lineOfLog, @"\d{2}:\d{2}:d{2}"))
{
}
break;
}
return dnt;
}
答案 0 :(得分:7)
首先:您的模式无效:
@"\d{2}:\d{2}:d{2}"
必须是:
@"\d{2}:\d{2}:\d{2}"
您在最后\
d
第二:我猜绝对值是指long dnt
变量?如果是,那么您需要使用其中一个重载来解析日期并获取DateTime.Ticks。
例如:
string dateString = "Dec 25 14:11:03";
DateTime date = DateTime.ParseExact(dateString, "MMM dd HH:mm:ss", CultureInfo.InvariantCulture);
long ticks = date.Ticks;
其中:
MMM
月份的缩写名称。dd
每月的某一天,从01到31。HH
小时,使用从00到23的24小时制。mm
分钟,从00到59。ss
第二个,从00到59。Custom Date and Time Format Strings
第三:您当前的模式无法找到并捕获整个时间戳,因此您需要扩展它以将日期和时间部分放在一个字符串中:
string logLine = "Dec 25 14:11:03 Hello world!";
// Your new pattern:
string pattern = @"([a-z]{3} \d{2} \d{2}:\d{2}:\d{2})";
Match match = Regex.Match(logLine, pattern, RegexOptions.IgnoreCase);
if (match.Success)
{
string dateFormat = "MMM dd HH:mm:ss";
string dateString = match.Groups[1].Value;
DateTime date = DateTime.ParseExact(dateString, dateFormat, CultureInfo.InvariantCulture);
long ticks = date.Ticks;
}
目前,您只检查日志行是否包含时间戳。我已在模式中添加了()
捕获组,因此如果找到匹配项,您可以使用cought值match.Groups[1].Value
进行解析。索引为1
,因为模式中只定义了一个组。索引0
处的组始终包含原始字符串(在本例中为整个日志行)。