2016-08-26 184 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 
    ) 
     . 
)+ 
$ 
相關問題