Передача функции в функцию (заменить) Powershell

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

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

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

$mystring -replace "match", callback()

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

2 ответа

Решение

Возможно, вы ищете метод Regex.Replace (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

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

[Regex]::Replace($mystring, 'match', {callback})
Другие вопросы по тегам