C#| 正则表达式| 如何提高我的正则表达式性能

土耳其

我有一个日志文件,我想用正则表达式解析这些日志-如果满足正则表达式条件,则是一对一的行比较。

我要解析的行:

190326 000117.252|0|0|1221564|21|Beg|Request: http://myurl/services/serviceName [CallId=85aa2407-8ca0-481c-9ece-a772ca789ce0]

我想获取什么信息:

  • threadId = 21-在| Beg |之前 声明
  • callID = 85aa2407-8ca0-481c-9ece-a772ca789ce0-末尾的callId值

我创建的第一个正则表达式如下:

(?<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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章