Skip to main content
 首页 » 编程设计

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

2024年01月24日30三少

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

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

请您参考如下方法:

首先:你的模式无效:

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