Замена строки не работает, когда идентификатор группы находится рядом с переменной в PowerShell - PullRequest
1 голос
/ 20 марта 2020

У меня есть сценарий 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, которое близко к переменной, не интерпретируется как I ожидается.

Как это решить? Я попробовал Google, но безуспешно.

Ответы [ 2 ]

2 голосов
/ 20 марта 2020

Вот версия 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"
2 голосов
/ 20 марта 2020

Укажите номера вашей группы с помощью {}:

$year = 2020
$string = 'Const conToYear As String = "2018"'
$newString = $string -replace '(Const conToYear As String = ")(\d{4})(")', "`${1}$year`${3}"
Write-Host $newString
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...