复杂字符串后提取字符串

时间:2015-06-09 15:11:24

标签: regex

我正在尝试使用正则表达式,这将允许我从长异常字符串中提取异常消息:

  

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>.*)

2 个答案:

答案 0 :(得分:1)

只需检查您的例外名称后面的第一个:.*?:\s(或[^:]*:\s)。

(?<=AddlExc=\")(?P<exception_type>\b\S*Exception\b).*?:\s(?P<exceptionmessage>.*)

答案 1 :(得分:1)

要匹配/捕获两者,您可以这样做:

(?<=AddlExc=")(?P<exception_type>[^\s:]*)[^:]*:\s*(?P<exceptionmessage>.*)

Demo