Примените фильтр для строки, содержащей данную фразу, и верните все, что происходит после - PullRequest
0 голосов
/ 19 декабря 2018

Я хочу создать сценарий PowerShell, который возвращает все, что происходит после появления данной строки.Я хочу выполнить команду для одной строки вместо коллекции.

Например, я хочу вернуть все после фразы "_blah _"

_blah_v2.3 
_blah_bar_blah_v56
_blah_v42 
foo

Результат:

v2.3 
bar_blah_v56
v42 

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

$Foo = "blah_v1.1"
$FooVersion = ($Foo -split '_blah_', 2)[1]

Write-Host $Foo
Write-Host $FooVersion

, но он работает только с одним символом вместо строки.Я не свободно владею PowerShell и ищу быстрое и удобное решение.

Ответы [ 3 ]

0 голосов
/ 19 декабря 2018

Таким образом, строка с данной фразой отличается от вашего предыдущего вопроса , но в остальном разница не так велика.

Используйте что-то вроде

$FooVersion = $Foo -replace '_?blah_(.*)', '$1'

или

$FooVersion = ($Foo -split '_?blah_', 2)[-1]

или

if ($Foo -match '_?blah_(.*)') { $FooVersion = $Matches[1] } else { $FooVersion = $Foo }

сделает это.

Пожалуйста, прочтите также объяснение, данное mklement0 .Это, безусловно, поможет в будущих случаях.

0 голосов
/ 19 декабря 2018

Если производительность не является критической (крайне редкой), регулярное выражение - это хорошо.Я бы использовал позитивный взгляд назад.См. Следующий пример:

$test = '_blah_v2.3 ','_blah_bar_blah_v56','blah_v42 ','foo'
($test | Select-String '(?<=blah_).*').Matches.Value

Обратите внимание, что я использовал blah_ в качестве разделителя.

0 голосов
/ 19 декабря 2018

Возможно, Regex будет слишком тяжел для такой операции

Нет, не будет.

"_blah_v2.3" -replace '^.*?_blah_'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...