使用 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)