如何使用正则表达式在日志文件中查找日期时间模式

时间:2012-01-27 17:56:15

标签: regex

全部, 我对正则表达式并不是很好,并且试图找到用于测试它的正确工具,我使用regexpal在线测试器并且似乎没有得到这个:

问题:我有以下带有时间戳的日志文件: 示例:1/27/2012 10:47:50 AM : 0 : ContextManager.Initialize : 0 : Context Manager Initialization Started.

我正在寻找一个正则表达式,它将查看日志文件并查找上面列出的日期格式,如果它发现它我将进行额外的检查,我已经在做。我只需要获得正则表达式以匹配上面提到的以下内容。

以下是我到目前为止关于模式的内容:

@"\d{2,2}/\d{2,2}/\d{4,4} \d{2,2}:\d{2,2}:\d{2,2}";  

主要代码:.net c#

public void ValidateErrorHandlingMessagesInLogFile()
{
System.Diagnostics.Debugger.Launch();
       //@"\d{2,2}/\d{2,2}/\d{4,4} \d{2,2}:\d{2,2}:\d{2,2}"
       //^(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$
       string Pattern = @"\d{2,2}/\d{2,2}/\d{4,4} \d{2,2}:\d{2,2}:\d{2,2}";
       ValidateUsingRegularExpression(Pattern, "engine");
}

错误日志:

1/27/2012 10:47:50 AM : 0 : ContextManager.Initialize : 0 : Context Manager Initialization Started. 
1/27/2012 10:47:59 AM : 0 : RuleEngine:538 : 4 : History definition configuration failure. Update history_definition config parameter to resolve errors reported. history definition configuration failure - Unknown field name [Lie_DosFrom] in entry [MEM_DOS]

3 个答案:

答案 0 :(得分:1)

我建议你的reg模式改变如下:

@"\d{1,2}/\d{1,2}/\d{4,4} \d{2}:\d{2}:\d{2}";

也就是说,有时日期/月份只包含1位数,原始模式并不表示该数字。

通常,修饰符{m,n}表示此模式至少出现m次,最多出现n次; {m}{m,m}表示此模式恰好显示m次。

答案 1 :(得分:0)

几乎正确,但您的日期和月份只能是一位数,如您的示例所示!斜杠也需要转义,否则它标志着正则表达式的结束。

尝试

/\d\d?\/\d\d?\/\d{4} \d\d:\d\d:\d\d/

答案 2 :(得分:0)

使用此选项以M/d/yyyy h:mm:ss格式

查找所有日期时间
\d{1,2}/\d{1,2}/\d{4} \d{1,2}:\d{2}:\d{2}