Замена первого символа каждого слова, не затрагивая внутренние - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь заменить первый символ каждого ключевого слова в PowerShell, но не могу найти правильный шаблон, чтобы получить требуемый результат. Каким-то образом мне удается получить замену, но влияют и другие значения, которые действуют как значения, т. Е. "Gii-test-api.ne", конвертируемый в "Gii $ test $ api $ ne".

Например:

Моя строка (замена - на $):

$values = -CertThumb 1234567 -serverCertThumb 75659600 -MaintenancePeriod 60 -apiProtocol https -Port 8973 -Uri Gii-test-api.ne

Ожидаемый результат:

$CertThumb 1234567 $serverCertThumb 75659600 $MaintenancePeriod 60 $apiProtocol https $Port 8973 $Uri Gii-test-api.ne

Пробная команда:

$values.ToString() -replace ('^*\-','$')

1 Ответ

0 голосов
/ 01 мая 2018

Вы можете использовать следующее регулярное выражение вместо, где - символы совпадают, только если перед ними не стоит слово char:

$values -replace '\B-','$'

Или, если вы хотите заменить только -, которому предшествует пробел или начало строки:

$values -replace '(?<!\S)-','$'

Здесь \B соответствует любому местоположению, кроме границы слова (т. Е. Здесь, - соответствует только тогда, когда ему не предшествуют буква, цифра или _) и отрицательный знак (?<!\S) lookbehind соответствует местоположению в строке, которое является либо началом строки, либо предшествует пробелу.

Обратите внимание, что замена может быть либо '$', либо '$$' (литерал $ в замене будет проанализирован здесь как символ $, но в случае замены на цифру $ + вы придется бежать $ с другим $).

См. Демоверсию regex .

enter image description here

...