[英]Matching a partial string with a regular expression
我試圖解析一個堆棧跟蹤的片段,它看起來很像這樣:
at Test.Test1() in C:\Projects\Project\Test.cs:line 37
使用這樣的正則表達式可以按預期工作:
at (.*?) in (.*?):line (\d*)
這個匹配
此正則表達式被硬編碼為英文的stacktrace,因此如果stacktrace使用另一種語言(例如瑞典語),則顯然沒有匹配項:
vid Test.Test1() i C:\Projects\Project\Test.cs:rad 37
為了使匹配更加語言中立,我嘗試了此正則表達式:
(.*?) .*? (.*?) (\d*)
這個匹配
問題是我如何匹配不帶尾部:line的文件路徑?
您可以嘗試硬編碼在文件名部分中第二個冒號的必要性:
.:[^:]*
在驅動器號后的冒號之后,顯然不能再有其他冒號成為文件名的一部分。 但是,您可能必須處理UNC路徑,因此以下內容可能會解決該問題:
.:?[^:]*
這使得冒號是可選的,以允許使用UNC路徑。
因此,使用以下“:line”捕獲的文件名部分可能看起來像這樣:
(.:?[^:]*):\S+
(。 ?)。 ? (。 ?):(\\ 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中的rad中$ 3中的$ 37中$ 4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.