Powershell Regex поможет в извлечении текста между строками - PullRequest
0 голосов
/ 04 июня 2010

У меня есть аргументы, подобные приведенному ниже, которые я передаю скрипту powershell

-arg1 -abc -def -arg2 -ghi -jkl -arg3 -123 -234

Теперь мне нужно извлечь три строки без пробелов

string 1: "-abc -def" 

string 2: "-ghi -jkl"

string 3: "-123 -234"

Я подумал, что это выражение может сделать это. Но, похоже, это не работает.

$args -match '-arg1(?'arg1'.*?) -arg3(?'arg3'.*?) -arg3(?'arg3'.*)'. 

Это должно вернуть $ match ['arg1'] и т. Д. Так что же не так в приведенном выше выражении. Почему я получаю ошибку, как показано ниже

runScript.ps1 -arg1 -abc -def -arg2 -ghi -jkl -arg3 -123 -234

Unexpected token 'arg1'.*?) -arg2
(?'arg2'.*?) -arg3 (?'arg3'.*)'' in
expression or statement. At
G:\powershell\tools\powershell\runTest.ps1:1
char:71
+ $args -match '-arg1 (?'arg1'.*?) -arg2 (?'arg2'.*?) -arg3 (?'arg3'.*)' <<<<
    + CategoryInfo          : ParserError: (arg1'.*?) -arg2...g3
(?'arg3'.*)':String) [],
ParseException
    + FullyQualifiedErrorId : UnexpectedToken

а также второй вопрос: как мне сделать arg1 или arg2 или arg3 необязательным?

Аргумент к скрипту может быть

-arg2 -def -ghi.

Я возьму некоторые значения по умолчанию для arg(1|2|3), которые не упомянуты.

Спасибо

1 Ответ

0 голосов
/ 04 июня 2010

кажется, что подсветка синтаксиса переполнения стека уже испортила его для вас: вы дважды используете символ '; для именованных групп и для всей строки.

Я не могу попробовать, поскольку у меня нет PS на этой коробке, но как насчет:

$args -match '-arg1(?<arg1>.*?) -arg2(?<arg2>.*?) -arg3(?<arg3>.*)'

Кроме того, я бы заменил пробелы на \s+, так что допускается также несколько пробельных символов между параметрами.

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