Передача функции функции Powershell (replace)
Я хочу передать вызов функции (который возвращает строку) в качестве замены строки для функции замены Powershell, так что каждое найденное совпадение заменяется другой строкой.
Что-то вроде -
$global_counter = 0
Function callback()
{
$global_counter += 1
return "string" + $global_counter
}
$mystring -replace "match", callback()
Python позволяет это через функцию 're' модуля 'sub', которая принимает функцию обратного вызова в качестве входного. Поиск чего-то подобного
Ответы
Ответ 1
Возможно, вы ищете Regex.Replace Method (String, MatchEvaluator). В PowerShell блок script может использоваться как MatchEvaluator
. Внутри этого блока script $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
Ответ 2
В PowerShell нет (пока?) поддержки для передачи блока script оператору -replace
. Единственный вариант здесь - напрямую использовать [Regex]::Replace
:
[Regex]::Replace($mystring, 'match', {callback})