Передача функции в функцию Powershell (замена) - PullRequest
11 голосов
/ 17 ноября 2011

Я хочу передать вызов функции (которая возвращает строку) в качестве строки замены функции замены Powershell, чтобы каждое найденное совпадение заменялось другой строкой.

Что-то вроде -

$global_counter = 0
Function callback()
{
    $global_counter += 1   
    return "string" + $global_counter
}

$mystring -replace "match", callback()

Python позволяет это через функцию 're' модуля 'sub', которая принимает функцию обратного вызова в качестве входных данных. Ищу что-то похожее

Ответы [ 2 ]

18 голосов
/ 17 ноября 2011

Возможно, вы ищете Regex.Replace Method (String, MatchEvaluator) .В PowerShell блок сценария можно использовать как MatchEvaluator.Внутри этого блока скрипта $args[0] находится текущее совпадение.

$global_counter = 0
$callback = {
    $global_counter += 1
    "string-$($args[0])-" + $global_counter
}

$re = [regex]"match"
$re.Replace('zzz match match xxx', $callback)

Вывод:

zzz string-match-1 string-match-2 xxx
10 голосов
/ 17 ноября 2011

PowerShell (пока?) Не поддерживает передачу блока скрипта оператору -replace. Единственный вариант здесь - использовать [Regex]::Replace напрямую:

[Regex]::Replace($mystring, 'match', {callback})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...