Сопоставление частичной строки с регулярным выражением - PullRequest
0 голосов
/ 04 августа 2009

Я пытаюсь разобрать фрагмент трассировки стека, который выглядит примерно так:

at Test.Test1() in C:\Projects\Project\Test.cs:line 37 

Использование регулярного выражения, как это работает как задумано:

at (.*?) in (.*?):line (\d*)

Это соответствует

  1. Test.Test1 ()
  2. C: \ Projects \ Project \ Test.cs
  3. 37

Это регулярное выражение жестко запрограммировано в английской трассировке стека, поэтому очевидно, что совпадений в стековой трассировке на другом языке, например, шведском:

vid Test.Test1() i C:\Projects\Project\Test.cs:rad 37

Чтобы сделать сопоставление более нейтральным по языку, я попробовал это регулярное выражение:

 (.*?) .*? (.*?) (\d*)

Это соответствует

  1. Test.Test1 ()
  2. C: \ Projects \ Project \ Test.cs: линия
  3. 37

Вопрос в том, как бы я соответствовал пути к файлу без завершающей строки:

Ответы [ 2 ]

2 голосов
/ 04 августа 2009

Вы можете попробовать жестко запрограммировать необходимость наличия двоеточия на втором месте в части имени файла:

.:[^:]*

После двоеточия, следующего за буквой диска, очевидно, не может быть дальнейших двоеточий, которые были бы частью имени файла. Возможно, вам придется справиться с путями UNC, поэтому следующее может исправить это:

.:?[^:]*

, что делает двоеточие необязательным для разрешения путей UNC.

Итак, ваши захваты для части имени файла со следующим: "line" могут выглядеть следующим образом:

(.:?[^:]*):\S+
1 голос
/ 04 августа 2009

(. ?). ? (. ?): (\ S +) (\ d )

Я предполагаю, что пробелы между совпадениями фактически совпадают с пробелами в регулярном выражении. Двоеточие, вероятно, будет постоянным на всех языках, поэтому вам нужно просто сопоставлять непробельные символы после двоеточия

Edit:

Поиграл и придумал:

.+?\s+(\S+)\s+.+?\s+(.*):(\S*)\s(\d+)

для

at Test.Test1() in C:\Projects\Project Folder\Test.cs:rad 37

Двоеточие на пути бросало меня на секунду. но это должно иметь

Test.Test1 () в $ 1 C: \ Projects \ Папка проектов \ Test.cs в $ 2 рад в 3 доллара 37 в $ 4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...