我正在尝试解析堆栈跟踪的片段,看起来非常像这样:
at Test.Test1() in C:\Projects\Project\Test.cs:line 37
使用像这样的正则表达式按预期工作:
at (.*?) in (.*?):line (\d*)
匹配
这个正则表达式是硬编码到英文堆栈跟踪,所以如果堆栈跟踪是另一种语言,显然没有匹配,例如瑞典语:
vid Test.Test1() i C:\Projects\Project\Test.cs:rad 37
为了使匹配更加语言中立,我尝试了这个正则表达式:
(.*?) .*? (.*?) (\d*)
匹配
问题是我如何匹配没有尾随的文件路径:line?
答案 0 :(得分:2)
您可以尝试在文件名部分的第二位硬编码必须使用冒号:
.:[^:]*
在驱动器号后跟冒号后,显然不能再有任何冒号作为文件名的一部分。但是,您可能必须处理UNC路径,因此以下内容可能会解决此问题:
.:?[^:]*
使冒号可选以允许UNC路径。
因此,您对以下“:line”的文件名部分的捕获可能如下所示:
(.:?[^:]*):\S+
答案 1 :(得分:1)
(。?)。? (。?):( \ S +)(\ d )
我假设匹配之间的空格实际上匹配正则表达式中的空格。冒号可能在所有语言中都是常量,因此您只需要在冒号后匹配非空白字符
编辑:
玩了一下并想出了这个:
.+?\s+(\S+)\s+.+?\s+(.*):(\S*)\s(\d+)
代表
at Test.Test1() in C:\Projects\Project Folder\Test.cs:rad 37
路径上的冒号让我失去了一秒钟。但这应该有
$ 1中的Test.Test1() C:\ Projects \ Projects Folder \ Test.cs $ 2 拉3美元 37美元