我写了一个正则表达式来捕获windows事件日志中的某些字段,下面是正则表达式:
(?:Subject\:)(?<Subject>.+)$[\n](?:Created)
以下是与Regex匹配的示例窗口事件日志。
Log: ABC
Source: DocumentService
Level: Error
Subject:
ABC.BizService.DocumentVendors.DocumentVendorException: No Instances
Created On (UTC): 7/6/2017 8:57:04 PM
Created On (Local Machine): 7/6/2017 4:57:04 PM
System Information
Machine: Server1
Operating System: Microsoft Windows NT 6.2.9200.0
Process ID: 1360
Process Name: abc.Server.Document
System Name: PROD
Domain: Dom1
User: DOM1\66
Message ID: 0
Transaction Context: 0
Exception Id: 00000000-0000-0000-0000-000000000000
Submitted Message:
Error building document '638. No Instances'
当我使用正则表达式的输出时,我得到以下输出:
ABC.BizService.DocumentVendors.DocumentVendorException: No Instances
Created On (UTC): 7/6/2017 8:57:04 PM
在最终输出中,我甚至想要排除此Created On
字段以及之后的所有内容。如果您注意到我只想捕获Subject
字段中正在写入的内容。看起来像我的正则表达式我甚至照顾非捕获组。但它们仍在出现。
答案 0 :(得分:0)
由于.+
是贪婪的,因此捕获组会将所有内容与第二个 Created
行匹配,因此第一个Created
行包含在匹配。
使用非贪婪量词.+?
来获得最短匹配而不是最长匹配。
(?:Subject\:)(?<Subject>.+?)$[\n](?:Created)