2014-12-29 4 views
1

Так что я пытаюсь работать с регулярного выражения строка у меня естьRegex Пуллс некоторые биты из строки

Successfully created package 'C:\Users\mhopper\Documents\CreateNugetPackage\AjaxControlToolkit.3.5.50401.nupkg' 

Я пытаюсь сделать регулярное выражение, которое тянет «успешно» и «C: \ Пользователи \ mhopper \ Documents \ CreateNugetPackage \ AjaxControlToolkit.3.5.50401.nupkg»

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

'.*(Successfully\.*\C\D+).*', '$1' 

ответ

3

Regex:

^(\S*)\s.*'(.*)'$ 
  • # 1 матч статус
  • # 2 матч это путь

https://regex101.com/r/eC7vX1/1

Powershell:

$line = "Successfully created package 'C:\Users\mhopper\Documents\CreateNugetPackage\AjaxControlToolkit.3.5.50401.nupkg'" 
$values = $line -split "^(\S*)\s.*'(.*)'$" 
$status = $values[1] 
$path = $values[2] 
("status:{0}\npath:{1}" -f $status,$path) 
+0

Да, сработало спасибо! – Macauley

2

Вам нужно быть немного более конкретным о почему вам нужно регулярное выражение.

Просто получение этих двух значений из строки действительно не требует регулярного выражения.

$Status,$PackagePath = ($String.Trim().Split(' ',4))[0,3] 
+0

Будет ли '[0, -1]' лучше в случае появления других слов в середине. – Matt

+0

Это не удастся, если путь будет содержать пробелы в нем. Вы разделили бы путь пакета посередине и получили бы только последнюю/выбранную часть. – BartekB

+0

@BartekB - $ true. Но вы можете позаботиться об этом, указав раздельный подсчет. Обновлен ответ. – mjolinor

Смежные вопросы