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
размещает только указанный разделитель (' '
) между элементами, результирующая строка не имеет завершающий пробел.