Использование Powershell для замены захваченного значения - PullRequest
1 голос
/ 29 мая 2019

Я хочу заменить значение в XML с помощью PowerShell.У меня ниже строки (часть XML) хочу заменить 100 на другое значение

<stringProp 79357name="ThreadGroup.79357num_threads">100</stringProp>

Я пробовал ниже код, который идентифицирует требуемое значение, но при замене заменить все числовое значение

$DN = '<stringProp 79357name="ThreadGroup.79357num_threads">100</stringProp>'
$test =10000
[regex]$rx='^ThreadGroup.79357num_threads">(.+?)</stringProp>$'
$rx.Match($DN)
$DN = $rx.Replace($DN,'$1') -replace '\d+',$test
Write-Host $DN

После выполнения кода выше я получаю вывод

<stringProp 10000name="ThreadGroup.10000num_threads">10000</stringProp>

и ожидаю

<stringProp name="ThreadGroup.10000num_threads">10000</stringProp>

1 Ответ

1 голос
/ 29 мая 2019

Группы захвата используются в регулярных выражениях для извлечения части совпадения с образцом, когда нам нужно сопоставить их в определенных контекстах.Замена захваченных текстов напрямую не поддерживается, хотя с некоторым кодированием это можно обойти.

Вместо этого используйте группы захвата, чтобы делать то, для чего они предназначены: захватывать то, что вам нужно сохранить, и просто соответствовать тому, что вам нужно

Использовать

$DN -replace '(ThreadGroup\.79357num_threads">).*?(</stringProp>)',"`${1}$test`$2"

ThreadGroup.79357num_threads"> записывается с (ThreadGroup\.79357num_threads">) в группу 1 и </stringProp> захватывается с (</stringProp>) в группу 2.

Замена "`${1}$test`$2" - это содержимое группы 1 ($1), затем значение переменной $test, а затем значение группы 2. Обратите внимание на обратные черты перед $, необходимые для обработки Powershell.в качестве буквального $ символов, а не строки, экстраполирующей «маркер».

Вам нужно ${1}, а не $1, потому что переменная $test начинается с цифры, а сразу после цифрыобратная ссылка (например, $1) идентификатор должен быть заключен в фигурные скобки, чтобы избежать двусмысленности с идентификатором группы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...