powershell中的正则表达式前瞻表现得非常奇怪

时间:2017-01-11 22:24:41

标签: regex string powershell logging

我会第一个承认我不是最好的正则表达作家。我正在尝试解析PowerShell中的日志文件。日志文件以日期时间戳开头,可以是多行。一个例子如下:

2017-01-10T17:52:24.224-05:00 DEBUG (0EC3-018C) < ThisIsAClassName> [blah] log lines are here
     this is an addition to the previous line
     So is this at 2017-01     
2017-01-10T17:52:26.224-05:00 DEBUG (0EC3-018C) < ThisIsADiffClassName> [blah] log lines are here

我的正则表达式如下所示

Timestamp         = "\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}"
Anything          = "[.|\w]"
NegativeLookahead = "(?!(" + Timestamp + "))"
FullRegex         = Timestamp + Anything + NegativeLookahead

这给了我确切的输入。为了按行时间戳分割行,我做错了什么?

1 个答案:

答案 0 :(得分:1)

我理解你处理多行内容。在这种情况下,拆分而不是匹配要容易得多:

"(?m)^(?=" + Timestamp + ")"

或者,为了避免在开始时使用空元素,请在(?!\A)之前或之后添加^预测:

"(?m)(?!\A)^(?=" + Timestamp + ")"

请参阅regex demo

enter image description here

最后看起来像(?m)^(?=\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}),并且会匹配任何行首位置((?m)多行修饰符会使^匹配行的开头而不是整个字符串)之后是时间戳模式时间戳文本不会被消耗(=赢得不是匹配值的一部分,因此将出现在拆分文本中)as它在(?=...)正向前瞻构造中使用。