为什么在Powershell中使用替换运算符时无法对匹配组执行操作?

问题描述 投票:0回答:1

为什么执行以下脚本:

'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

是否可以对匹配组进行某些操作?

powershell replace operators
1个回答
0
投票

作为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()}
© www.soinside.com 2019 - 2024. All rights reserved.