我有一个日志文件,我想用正则表达式解析这些日志-如果满足正则表达式条件,则是一对一的行比较。
我要解析的行:
190326 000117.252|0|0|1221564|21|Beg|Request: http://myurl/services/serviceName [CallId=85aa2407-8ca0-481c-9ece-a772ca789ce0]
我想获取什么信息:
我创建的第一个正则表达式如下:
(?<thread>\d{2}).*\|Beg.*\[CallId=(?<CallId>[a-zA-Z0-9\-]+?)\]
执行时间大约为30-35秒。
我使用的第二个正则表达式如下所示:
(?<thread>\d{2})[^|]*\|Beg.*\[CallId=(?<CallId>[a-zA-Z0-9\-]+?)\]
沉淀时间降至约9秒。
您能否看一下我的正则表达式,并建议我是否有可能改进正则表达式以获得更好的执行时间?
预先感谢,戴夫。
如果可以使用两个正则表达式,请使用两个正则表达式-一个用于线程ID,另一个用于调用ID。
对于线程ID:
(\d{2})[^|]*\|Beg
获取组1。
对于呼叫ID:
CallId=([a-zA-Z0-9\-]+)
获取组1。
在regex101.com上,您的正则表达式执行了269个步骤,而这两个正则表达式分别执行了141和11个步骤。
如果仅使用1个正则表达式,则可以尝试进行最后一个+
贪婪操作:
(?<thread>\d{2})[^|]*\|Beg.*\[CallId=(?<CallId>[a-zA-Z0-9\-]+)\]
这将步骤从269减少到199。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句