Подтвердить что ты не робот

Есть ли более короткий способ вытащить группы из регулярного выражения Powershell?

В PowerShell я снова и снова делаю такие вещи для матчей:

some-command | select-string '^(//[^#]*)' |
     %{some-other-command $_.matches[0].groups[1].value}

Итак, в основном - запустите команду, которая генерирует строки текста, и для каждой строки я хочу запустить команду для захвата регулярных выражений внутри строки (если она совпадает). Кажется, очень просто. Вышеупомянутые работы, но есть ли более короткий способ вытащить группы захвата регулярных выражений? У Perl было 1 доллар и так далее, если я правильно помню. У Posh должно быть что-то похожее, не так ли? Я видел ссылки "$ matches" на SO, но не могу понять, что делает этот набор.

Я очень новичок в PowerShell, но начал учиться.

4b9b3361

Ответ 1

Вы можете использовать оператор -match, чтобы переформулировать свою команду как:

some-command | Foreach-Object { if($_ -match '^(//[^#]*)') { some-other-command $($matches[1])}}

Ответ 2

Именованная замена

'foo bar' -replace '(?<First>foo).+', '${First}'

Возвращает: foo

Без изменений

 'foo bar' -replace '(foo).+(ar)', '$2 z$2 $1'

Возвращает: ar zar foo

Ответ 3

Вы можете попробовать следующее:

Get-Content foo.txt | foreach { some-othercommand [regex]::match($_,'^(//[^#]*)').value }