Mam ciąg, który podzieliłem za pomocą kodu $CreateDT.Split(" ")
. Teraz chcę manipulować dwoma oddzielnymi ciągami na różne sposoby. Jak rozdzielić te dwie zmienne?
string
powershell
davetherave
źródło
źródło
Odpowiedzi:
Lubię to?
$string = 'FirstPart SecondPart' $a,$b = $string.split(' ') $a $b
źródło
"FirstPart SecondPart ThirdPart"
i chcesz tylko dwa, możesz użyć$a,$b = $string.split(' ')[0,1]
Za pomocą
-split
operatora tworzona jest tablica . Tak jak tak$myString="Four score and seven years ago" $arr = $myString -split ' ' $arr # Print output Four score and seven years ago
Kiedy potrzebujesz określonego elementu, użyj indeksu tablicy, aby go osiągnąć. Pamiętaj, że indeks zaczyna się od zera. Tak jak tak
$arr[2] # 3rd element and $arr[4] # 5th element years
źródło
$arr = @($myString.split(' '))
$first_word = ("one-two-three" -split '-')[0]
.Split()
zawsze zwraca tablicę, więc nie ma potrzeby@(...)
:$arr = $myString.split(' ')
Pamiętaj jednak, że im więcej PowerShell-idiomatyczne rozwiązanie$arr = $myString -split ' '
jest już część odpowiedzi. Zwróć jednak uwagę, że-split
przyjmuje wyrażenie regularne i nie uwzględnia wielkości liter (użyj-csplit
do dzielenia z uwzględnieniem wielkości liter ).Należy zwrócić uwagę na następującą różnicę między tymi dwiema technikami:
$Str="This is the<BR />source string<BR />ALL RIGHT" $Str.Split("<BR />") This is the (multiple blank lines) source string (multiple blank lines) ALL IGHT $Str -Split("<BR />") This is the source string ALL RIGHT
Z tego widać, że
string.split()
metoda :Podczas gdy
-split
operator :źródło
-split
zajmuje regex (regular expression) jako (pierwszego) RHS argumentu, natomiast[string]
Type jest.Split()
metoda działa na dosłownym znak / tablicy znaków / i - w .NET Rdzenia - również literalna ciąg . Zwróć również uwagę, że prawidłowa składnia w PowerShell to$Str -split '<BR />'
; podczas składni pseudo sposób$Str -Split("<BR />")
dzieje się pracę w tym przypadku, należy unikać.Spróbuj tego:
$Object = 'FirstPart SecondPart' | ConvertFrom-String -PropertyNames Val1, Val2 $Object.Val1 $Object.Val2
źródło
ConvertFrom-String
jest przestarzały i należy go unikać (zawsze miał charakter eksperymentalny, a fakt, że nie został uwzględniony w PowerShell Core, gdzie koncentrują się przyszłe wysiłki programistyczne, wskazuje, że nie ma go tutaj, aby zostać). Jeśli chodzi o potrzebę dodatkowej manipulacji: zadanie destrukturyzacji wystarczy:$val1, $val2 = 'FirstPart SecondPart' -split ' '
ConvertFrom-String
„s nieodłącznych problemów to wystarczający powód, aby tego uniknąć. Dotyczy to w szczególności do analizowania opartym na szablonie, ale nawet parsowanie ogranicznik oparte jest wadliwa ze względu na rodzaj wnioskowania , który jest niezmiennie stosowanej - patrz stackoverflow.com/a/50166580/45375 .Instrukcja operacji dla obiektu:
$a,$b = 'hi.there' | foreach split . $a,$b hi there
źródło