2011-11-17 65 views
10

我想將一個函數調用(它返回一個字符串)作爲替換字符串傳遞給Powershell的替換函數,使得找到的每個匹配都被替換爲一個不同的字符串。將函數傳遞給Powershell的(替換)函數

喜歡的東西 -

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

$mystring -replace "match", callback() 

Python允許此通過「重新」模塊的「子」,它接受一個回調函數作爲輸入功能。尋找類似的東西

回答

16

也許你正在尋找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

PowerShell不支持將腳本塊傳遞給-replace運算符。這裏唯一的選擇就是直接使用[Regex]::Replace

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