首页 > 解决方案 > 当组标识符靠近 PowerShell 中的变量时,字符串替换不起作用

问题描述

我有一个这样的 PowerShell 脚本:

$year = 2020
$string = 'Const conToYear As String = "2018"'
$newString = $string -replace '(Const conToYear As String = ")(\d{4})(")', "`$1$year`$3"
Write-Host $newString

它提供输出$12020",但我需要Const conToYear As String = "2020". 我在少数地方使用了类似的替换模式,使用组和变量并且它们起作用。

有趣的是,当我这样做时:

$year = 2020
$string = 'Const conToYear As String = "2018"'
$newString = $string -replace '(Const conToYear As String = ")(\d{4})(")', "`$1`$1$year"
Write-Host $newString

然后我得到Const conToYear As String = "$12020,所以看起来第二次出现的$1接近变量没有像我预期的那样被解释。

如何解决这个问题?我试过谷歌它,但没有成功。

标签: powershell

解决方案


这是powershell 6及更高版本。参考捕获组需要做一些事情。但是您不必混合变量和替换运算符特殊的 $ 代码。

$year = 2020
$string = 'Const conToYear As String = "2018"'
$string -replace '(Const conToYear As String = ")(\d{4})(")',
  { $_.groups[1].value + $year + $_.groups[3].value }

Const conToYear As String = "2020"

推荐阅读