Можно ли использовать $ Matches в Powershell -match? - PullRequest
1 голос
/ 07 марта 2019

Я пытаюсь прочитать несколько значений из строки. Ключевые слова могут появляться в любом месте строки. Я хочу, чтобы "Значение" или контент непосредственно следовал за ним.

$str = 'Some version v1.2.3.4 (xyz) AnotherVal RandomKeyword: ValX'

Я пробовал

$test = $str -match 'Some version .*'
$val1 = $Matches[0] -replace 'Some version',''
Write-Host $val1 #gets the remainder of the string
$test2 = $val1 -match '\) '
Write-Host $Matches[0] #doesn't get the string following

Есть ли способ, которым $Matches необходимо сбросить? Может быть, есть лучший способ сопоставления с образцом?

Ответы [ 2 ]

3 голосов
/ 07 марта 2019

То, что вы, кажется, хотите, это захват групп. если это так, то, похоже, это делает работу. [ ухмылка ]

$InStuff = 'Some version v1.2.3.4 (xyz) AnotherVal'

$InStuff -match '^.+ version (.+) \(.+\) (.+)$'

$Matches

вывод ...

Name                           Value
----                           -----
2                              AnotherVal
1                              v1.2.3.4
0                              Some version v1.2.3.4 (xyz) AnotherVal

Вы можете связаться с различными группами захвата с помощью соответствующего номера индекса. если тип информации известен, вы можете использовать с именем группа захвата.

1 голос
/ 07 марта 2019

В первом примере ваше регулярное выражение Some version начинается с начала строки, а .* переносит его в конец.$matches содержит всю строку, потому что регулярное выражение "match" является всей строкой.

Во втором примере \) охватывает только закрывающую скобку и пробел.Это регулярное выражение "матч", так что это то, что входит в $matches.Чтобы получить остальное, вам нужно изменить регулярное выражение, чтобы оно соответствовало и остальному: $val1 -match '\) .*'

@ Lee_Dailey ответ хорош для правильного использования Regex, но часто удобно использоватьрегулярное выражение назад и избавиться от того, что вы знаете, оставив неизвестное осталось.

$str = 'Some version v1.2.3.4 (xyz) AnotherVal'
$lastBit = $str -replace 'Some version '
$parts = $lastBit -split ' '
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...