Удаление пробелов из переменной, введенной пользователем в 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", ""