我正在尝试使用正则表达式,这将允许我从长异常字符串中提取异常消息:
AddlExc =“System.Data.SqlClient.SqlException(0x80131904):错误:3980,严重性:16,状态:1。(Params :)。错误以简洁模式打印,因为格式化过程中出错。跟踪, ETW,通知等被跳过。
AddlExc =“Trebuchet.TrebuchetDbException:无法连接到SQL Server数据库---> System.InvalidOperationException:超时已到期。从池中获取连接之前经过的超时时间。这可能是因为所有池连接都已发生正在使用,达到最大池大小。
我已经设法提取了例外类型:
(?<=AddlExc=")(?P<exception_type>\b\S*Exception\b)
这会正确返回“System.Data.SqlClient.SqlException”或“Trebuchet.TrebuchetDbException”。
现在我想在第一个“:”之后提取消息,所以之后异常类型直到行结束。我已设法使用以下内容将其用于第一条消息:
(?<=AddlExc=")\b\S*Exception\s\S*: (?P<exceptionmessage>.*)
同样,我已经设法分别使用它来为第二条消息工作:
(?<=AddlExc=")\b\S*Exception*: (?P<exceptionmessage>.*)
但是......我找不到两种语句都有效,显然“(0x80131904)”导致我的第二次尝试出现问题 - 请帮帮忙!
以下是我的在线测试:https://regex101.com/r/cK3wD8/1
感谢下面的答案,这适用于:
(?<=AddlExc=\")\b\S*Exception\b.*?:\s(?P<exceptionmessage>.*)
答案 0 :(得分:1)
只需检查您的例外名称后面的第一个:
:.*?:\s
(或[^:]*:\s
)。
(?<=AddlExc=\")(?P<exception_type>\b\S*Exception\b).*?:\s(?P<exceptionmessage>.*)
答案 1 :(得分:1)