2014-06-22 28 views
10

Tak więc próbowałem już kilku rzeczy, ale z jakiegoś powodu nie działają.Usuwanie spacji ze zmiennej wprowadzonej przez użytkownika w programie PowerShell 4.0

Zasadniczo to, co próbuję zrobić, to wprowadzenie wartości przez użytkownika przy użyciu polecenia cmdlet "Read-host" , a następnie usunięcie go z dowolnych spacji.

Próbowałem

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

I ja też próbowałem

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

jestem prawdopodobnie brakuje czegoś naprawdę oczywiste, ale czy ktoś mógłby mi pomóc lub pokazać mi łatwiejszy sposób, aby osiągnąć to bym doceniam to.

Będę przesyłać zmienną do komendy i rozbierać ją w ten sposób, ale wszystkie przykłady, które widzę, nie działają, ale wyglądają znacznie łatwiej.

+1

'$ str = $ str.replace ('', '')' –

Odpowiedz

23

Operator Replace oznacza Wymień coś z czymś jeszcze:; nie należy mylić funkcji usuwania.

Należy również wysłać wynik przetworzony przez operatora do zmiennej lub innego operatora. Ani .Replace(), ani -replace nie modyfikuje oryginalnej zmiennej.

Aby usunąć wszystkie spacje, stosowanie „Zamień dowolny symbol kosmiczny z pustym ciągiem

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

Aby usunąć wszystkie spacje na początku i na końcu linii, i zastąpić wszystkie podwójne i-więcej- przestrzenie lub symbole zakładka do spacji symbol użyciu

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

lub większej liczby miejsc natywnego System.String sposób

$string = $string.Trim() 

Regexp jest preferowany, ponieważ ' ' oznacza tylko symbol "spacji", a '\s' oznacza "spację, tabulator i inne symbole przestrzeni". Zauważ, że $string.Replace() zmienia się "Normalnie", a $string -replace zastępuje RegEx, co jest bardziej ciężkie, ale bardziej funkcjonalne.

Zauważ, że RegEx pewne symbole specjalne, takie jak kropki (.), szelki ([]()), ukośniki (\), kapelusze (^), znaki matematyczne (+-) lub znaki dolara ($), które muszą być zrobić uciekł. . ('my.space.com' -replace '\.','-' =>'my-space-com' A znak dolara z numerem (ex $1) należy stosować w prawej części ostrożnie

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

UPDATE:. Można również użyć $str = $str.Trim(), wraz z TrimEnd() i TrimStart() Czytaj więcej na System.String strona MSDN.

5

Jesteś blisko. Można rozebrać spacje za pomocą metody replace tak:

$answer.replace(' ','')

Nie musi być żadnych spacji ani znaków między drugim zestawem cytatów w metodzie replace (zastępujące spacje z niczym).

1

Można użyć:

$answer.replace(' ' , '') 

lub

$answer -replace " ", "" 

jeśli chcesz usunąć wszystkie spacje można użyć:

$answer -replace "\s", "" 
3

mieć również Trim, TrimEnd i TrimStart metod klasy System.String. Sposób wykończenia usunie spacje (z kilkoma dziwactw Unicode) od przedniej i tylnej części napisu natomiast podrzucanie opcjonalnie znaków do usunięcia.

#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 i TrimEnd działają w ten sam sposób, a jedynie przycinają początek lub koniec ciągu znaków.