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