繁体   English   中英

正则表达式-从上次运行的作业返回时间戳(CSV文件)

[英]Regex - return time stamp from last job run (CSV file)

[00/00/0000 00:00:00]     EVENT: event    STATUS: success      JOB: jobnameA     MACHINE: machine
[00/00/0000 00:00:00]     EVENT: event    STATUS: failed       JOB: jobnameB     MACHINE: machine
[11/11/1111 11:11:11]     EVENT: event    STATUS: success      JOB: jobnameA     MACHINE: machine
[12/12/1212 12:12:12]     EVENT: event    STATUS: success      JOB: jobnameB     MACHINE: machine
[22/22/2222 22:22:22]     EVENT: event    STATUS: hold         JOB: jobnameC     MACHINE: machine

这是.csv日志文件中的两个示例行,显示了不同的作业运行。 我正在尝试使用正则表达式从匹配作业名称的上一次运行中返回时间戳(\\ [。{19} \\])。

使用VB.NET:

Dim pattern As String = "\[.{19}\](?=.+?status         JOB: jobname)"

reader = New StreamReader(path)
fileContents = reader.ReadToEnd()
m = Regex.Match(fileContents, pattern)

我当前的模式返回的是第一个匹配项,而不是最后一个匹配项,但是即使我得到了正确的表达,这也让人感到非常麻烦并且也喜欢使用错误的方法。

因此,首先,我如何才能使它最后一次获得工作名称,又如何才能更有效地做到这一点?

编辑:我正在寻找jobnameA的第二次(也称为最后一次)运行的时间戳

想通了...不知道这是否是最好的方法,但是它使我到了那里。 您可以输入任何状态或职位名称。

pattern = "\n\[(.*)].*(success.*jobnameA)(?!.*\2)"

或更好地使用变量

pattern = "\n\[(.*)].*(" & status & ".*" & jobname & ")(?!.*\2)"

说明:

\\ n-与换行符(换行符)匹配
[(。*)] -给我们时间戳(捕获组1)
。* -任意次数匹配任何字符,直到指定的作业状态
status-工作状态(可以是变量传递的任何内容)
。* -任何字符任意次数(在此情况下为空格)
jobname-指定的作业(通过变量)
(?!。* \\ 2) -是一个否定的前瞻,它使用第二个捕获组(状态/作业名称)来确保它仅返回给定状态下该作业的最后一个条目

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM