为什么执行以下脚本:
'abc abc abc' -replace '\w+', '$0 abc'.ToUpper()
我得到abc ABC abc ABC abc ABC
而不是ABC ABC ABC ABC ABC ABC
?
此外,如果我执行
'abc abc abc' -replace '\w+', '$0 abc'.ToCharArray()
我得到$ 0 a b c $ 0 a b c $ 0 a b c
是否可以对匹配组进行某些操作?
作为Lee_Daily points out,执行.ToUpper()
调用之前将字符串传递到-replace
。
如果要通过编程方式访问每个替代项,请直接使用[regex]::Replace()
:
[regex]::Replace('abc abc abc', '\w+', {"$($args[0].Value) abc".ToUpper()})
...,或者,如果您使用的是PowerShell 6.1或更高版本,-replace
还支持用于替代评估的脚本块:
'abc abc abc' -replace '\w+', {"$($_.Value) abc".ToUpper()}