Pasar una función a la función de Powershell (reemplazar)

Quiero pasar una llamada a función (que devuelve una cadena) como cadena de reemplazo a la función de reemplazo de Powershell, de modo que cada coincidencia encontrada se reemplaza con una cadena diferente.

Algo como –

$global_counter = 0 Function callback() { $global_counter += 1 return "string" + $global_counter } $mystring -replace "match", callback() 

Python permite esto a través de la función ‘sub’ del módulo ‘re’ que acepta una función de callback como entrada. Buscando algo similar

Quizás esté buscando Regex.Replace Method (String, MatchEvaluator) . En PowerShell, un bloque de script se puede usar como MatchEvaluator . Dentro de este bloque de script $args[0] es la coincidencia actual.

 $global_counter = 0 $callback = { $global_counter += 1 "string-$($args[0])-" + $global_counter } $re = [regex]"match" $re.Replace('zzz match match xxx', $callback) 

Salida:

 zzz string-match-1 string-match-2 xxx 

PowerShell no (¿todavía?) Tiene soporte para pasar un bloque de script al operador -replace . La única opción aquí es usar [Regex]::Replace directamente:

 [Regex]::Replace($mystring, 'match', {callback})