使用 MatchEvalutor 將文字替換為動態值

有時你需要將與模式匹配的值替換為基於該特定匹配的新值,從而無法預測新值。對於這些型別的場景,MatchEvaluator 非常有用。

在 PowerShell 中,MatchEvaluator 就像一個指令碼塊一樣簡單,只有一個引數包含當前匹配的 Match 物件 。操作的輸出將是該特定匹配的新值。MatchEvalutor 可以與 [Regex]::Replace() 靜態方法一起使用。

示例 :將 () 內的文字替換為其長度

#Sample text
$text = @"
This is (a) sample
text, this is
a (sample text)
"@
    
#Sample pattern: Content wrapped in ()
$pattern = '(?<=\().*?(?=\))'

$MatchEvalutor = {
    param($match)

    #Replace content with length of content
    $match.Value.Length

}

輸出:

> [regex]::Replace($text, $pattern, $MatchEvalutor)

This is 1 sample
text, this is
a 11

示例: 使 sample 為大寫

#Sample pattern: "Sample"
$pattern = 'sample'

$MatchEvalutor = {
    param($match)

    #Return match in upper-case
    $match.Value.ToUpper()

}

輸出:

> [regex]::Replace($text, $pattern, $MatchEvalutor)

This is (a) SAMPLE
text, this is
a (SAMPLE text)