2016-08-26 131 views
0

我想通过其中包含许多线,然后从其中一个异常被抛出,这样的类和方法的话ERROR一个日志文件来分析:正则表达式:匹配包含和不包含

2016-08-18 19:38:17 ERROR [KUHOMNYXARCH] [ 47] [c43215c4-acfd-491b-b418-653b53195be3] [MultiFormatRoiStreamer.GetImageRoi] 
2016-08-18 19:39:46 ERROR [KUHOMNYXARCH] [ 46] [10ba0a0e-0ede-4d0e-a582-d7e811bb7ade] [ExceptionHandlingBehavior.ProvideFault] 

我想写一个正则表达式,它将匹配所有包含ERROR但不包含MultiFormatRoiStreamer.GetImageRoiExceptionHandlingBehavior.ProvideFault的行。我尝试使用负向视向断言不起作用:

ERROR\s+\[KUHOMNYXARCH\] \[ [0-9]+\] \[[0-9a-f\-]+\] (?!(\[MultiFormatRoiStreamer\.GetImageRoi\]|\[ExceptionHandlingBehavior\.ProvideFault\])) 
ERROR.+(?!(MultiFormatRoiStreamer|ExceptionHandlingBehavior)) 

对此的任何想法?

+2

你能不能分开日志领域条目并检查相应的字段? –

+0

@AndrewMorton你是什么意思分开领域?这是从生产站点检索的平面文本文件。 –

+0

那么,如果字段由制表符分隔,请使用字符串拆分函数来获取字段数组。如果这些字段为固定宽度,则使用子字符串函数提取该行的相应部分。 –

回答

2

你可以用它来寻找线(S)

(?m)^.*?ERROR[^\S\r\n]+(?:(?!MultiFormatRoiStreamer\.GetImageRoi|ExceptionHandlingBehavior\.ProvideFault).)+$ 

它采用多行模式(?m)

扩展:

(?m) 
^ 
.*? 
ERROR [^\S\r\n]+ 
(?: 
     (?! 
      MultiFormatRoiStreamer\.GetImageRoi 
     | ExceptionHandlingBehavior\.ProvideFault 
    ) 
     . 
)+ 
$ 
相关问题