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

本文关键字:正则表达式 日期 查找 使用 | 更新日期: 2023-09-27 18:35:38

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

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

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

首先:您的模式无效:

@"'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。

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


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

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处的组始终包含原始字符串(在本例中为整个日志行)。