Передача функции в функцию (заменить) 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})