正则表达式使用C#查找日期

Bar*_*eld 1 c# regex datetime-format

我尝试使用正则表达式从日志文件中查找如下所示的日期和时间:

Dec 25 14:11:03....
Run Code Online (Sandbox Code Playgroud)

在日志文件中找到它们并将日期和时间计算为绝对值的最佳方法是什么?

我正在尝试此代码,但它找不到表达式:

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;
}
Run Code Online (Sandbox Code Playgroud)

t3c*_*b0t 7

第一:你的模式是无效的:

@"\d{2}:\d{2}:d{2}"
Run Code Online (Sandbox Code Playgroud)

肯定是:

@"\d{2}:\d{2}:\d{2}"
Run Code Online (Sandbox Code Playgroud)

\在最后一次之前错过了一次反斜杠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;
Run Code Online (Sandbox Code Playgroud)

哪里:

  • MMM 月份的缩写名称.
  • dd 每月的哪一天,从01到31.
  • HH 小时,使用00至23的24小时制.
  • mm 分钟,从00到59.
  • ss 第二,从00到59.

自定义日期和时间格式字符串


第三:您当前的模式无法找到并捕获整个时间戳,因此您需要扩展它以在一个字符串中获取日期和时间部分:

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;
}
Run Code Online (Sandbox Code Playgroud)

目前,您只检查日志行是否包含时间戳.我已经()为模式添加了一个捕获组,因此match.Groups[1].Value如果找到匹配项,您可以使用cought值进行解析.索引是1因为模式中只定义了一个组.索引处的组0始终包含原始字符串(在本例中为整个日志行).