Как заменить символ в Powershell на начальный символ + пробел - PullRequest
0 голосов
/ 27 февраля 2019

Надеюсь, на этот вопрос еще нет ответа на сайте.Я хочу заменить каждое число в строке этим числом и пробелом.Итак, вот что у меня есть сейчас:

"31222829" -replace ("[0-9]","$0 ")

[0-9] ищет любые числа и заменяет их на этот символ и пробел.Тем не менее, это не работает.Я видел с другого сайта, чтобы использовать $ 0, но я не уверен, что это значит. Результат, который я искал, был

3 1 2 2 2 8 2 9

Но он просто дает мне пустую строку.Есть предложения?

LardPies

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

tl; dr

PS> "31222829" -replace '[0-9]', '$& '
3 1 2 2 2 8 2 9 

Обратите внимание, что выходная строка имеет завершающий пробел, учитывая, что каждая цифра на входе ([0-9]) заменяется самой собой ($&) после пробела.


Что касается того, что вы пытались :

"31222829" -replace ("[0-9]","$0 ")

  • Хотя включение двух операндов RHS в (...) не мешает функциональности, на самом деле не очень полезно представлять их как массив - просто перечислите их с ,, незаключите их в (...).

  • Как правило, использует '...' вместо "..." для операндов RHS (регулярное выражение для сопоставления и операнд замены), чтобы избежать путаницы между расширением (интерполяцией) строки PowerShell и тем, что в конечном итоге видит оператор -replace.

    • Показательный пример: из-за использования "..." в операнде заменыСтроковая интерполяция PowerShell фактически расширила бы $0 как переменную , что в отсутствиепеременная расширяется до пустой строки - поэтому в конечном итоге вы увидели пустую строку.

    • Даже если вы использовали '...', $0 имеет нет особое значение в замещающем операнде;вместо этого вы должны использовать $& для представления совпадающей строки , как объяснено в этого ответа .


Чтобы безоговорочно разделить ВСЕ символы пробелами:

Полезный ответ Дрю определенно работает.
Вот более идиоматическая альтернатива PowerShell:

PS> [char[]] '31222829' -join ' '
3 1 2 2 2 8 2 9

Преобразование строки в [char[]] возвращает ее символы в виде массива, который -join затем соединяется с пробелом в качестве разделителя.

Примечание. Поскольку -join размещает только указанный разделитель (' ') между элементами, результирующая строка не имеет завершающий пробел.

0 голосов
/ 27 февраля 2019

Вероятно, это неправильный способ сделать это, но он работает.

("31222829").GetEnumerator() -join " "

Метод .GetEnumerator выполняет итерацию по каждому символу в строке. Оператор -join затем объединит всеэти символы с " " пробелом

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