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