Удаление пробелов из переменной, введенной пользователем в PowerShell 4.0

Итак, я уже пробовал несколько вещей, но они почему-то не работают.

В основном то, что я пытаюсь сделать, - это ввести пользователю значение, используя Командлет "Read-host", затем разделите его на любые пробелы.

Я пробовал

$answer = read-host
$answer.replace(' ' , '""')

И я также пробовал

$answer = read-host
$answer -replace (' ')

Я, вероятно, пропущу что-то действительно очевидное, но если кто-нибудь может помочь мне или показать мне более простой способ достичь этого, я был бы признателен.

Я собираюсь передать эту переменную команде и разбить ее таким образом, но все примеры, которые я вижу, не работают, но выглядят намного проще.

Ответ 1

Оператор Replace означает "Заменить что-то другим"; не путайте с функциональностью удаления.

Также вы должны отправить результат, обработанный оператором, переменной или другому оператору. Ни .Replace(), ни -replace не изменяет исходную переменную.

Чтобы удалить все пробелы, используйте "Заменить любой пробельный символ пустой строкой"

$string = $string -replace '\s',''

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

$string = $string -replace '(^\s+|\s+$)','' -replace '\s+',' '

или более собственный метод System.String

$string = $string.Trim()

Regexp является предпочтительным, потому что ' ' означает только символ "пробел", а '\s' означает "пробел, табуляция и другие пробельные символы". Обратите внимание, что $string.Replace() заменяет "Normal", а $string -replace заменяет RegEx, что является более тяжелым, но более функциональным.

Обратите внимание, что RegEx имеет некоторые специальные символы, такие как точка (.), фигурные скобки ([]()), косые черты (\), шляпы (^), математические знаки (+-) или знаки доллара ( $), которые должны быть экранированы. ('my.space.com' -replace '\.','-' = > 'my-space-com' Знак доллара с номером (ex $1) должен использоваться с правой стороны с осторожностью

'2033' -replace '(\d+)',$( 'Data: $1')
Data: 2033

UPDATE: вы также можете использовать $str = $str.Trim() вместе с TrimEnd() и TrimStart(). Подробнее читайте на System.String странице MSDN.

Ответ 2

Ты близко. Вы можете удалить пробелы с помощью метода replace следующим образом:

$answer.replace(' ','')

Между вторым набором кавычек в методе замещения не должно быть пробелов или символов (заменяя пробелы ничем).

Ответ 3

У вас также есть Trim, TrimEnd и TrimStart методы класса System.String. Метод обрезки будет разделять пробелы (с несколькими приконами Юникода) от ведущей и конечной части строки, позволяя при необходимости указывать удаляемые символы.

#Note there are spaces at the beginning and end
Write-Host " ! This is a test string !%^ "
 ! This is a test string !%^
#Strips standard whitespace
Write-Host " ! This is a test string !%^ ".Trim()
! This is a test string !%^
#Strips the characters I specified
Write-Host " ! This is a test string !%^ ".Trim('!',' ')
This is a test string !%^
#Now removing ^ as well
Write-Host " ! This is a test string !%^ ".Trim('!',' ','^')
This is a test string !%
Write-Host " ! This is a test string !%^ ".Trim('!',' ','^','%')
This is a test string
#Powershell even casts strings to character arrays for you
Write-Host " ! This is a test string !%^ ".Trim('! ^%')
This is a test string

TrimStart и TrimEnd работают одинаково, просто обрезая начало или конец строки.

Ответ 4

Вы можете использовать:

$answer.replace(' ' , '')

или

$answer -replace " ", ""

если вы хотите удалить все пробелы, которые вы можете использовать:

$answer -replace "\s", ""