Tengo una cadena, que he dividido usando el código $CreateDT.Split(" ")
. Ahora quiero manipular dos cadenas separadas de diferentes maneras. ¿Cómo puedo separarlos en dos variables?
string
powershell
Davetherave
fuente
fuente
Respuestas:
¿Me gusta esto?
$string = 'FirstPart SecondPart' $a,$b = $string.split(' ') $a $b
fuente
"FirstPart SecondPart ThirdPart"
y quiere solo dos, puede usar$a,$b = $string.split(' ')[0,1]
Se crea una matriz con el
-split
operador. Al igual que,$myString="Four score and seven years ago" $arr = $myString -split ' ' $arr # Print output Four score and seven years ago
Cuando necesite un elemento determinado, use el índice de matriz para alcanzarlo. Tenga en cuenta que el índice comienza desde cero. Al igual que,
$arr[2] # 3rd element and $arr[4] # 5th element years
fuente
$arr = @($myString.split(' '))
$first_word = ("one-two-three" -split '-')[0]
.Split()
siempre devuelve una matriz, por lo que no es necesario@(...)
:,$arr = $myString.split(' ')
pero tenga en cuenta que la solución más idiomática de PowerShell``$arr = $myString -split ' '
ya es parte de la respuesta. Sin embargo,-split
tenga en cuenta que toma una expresión regular y no distingue entre mayúsculas y minúsculas (se usa-csplit
para la división que distingue entre mayúsculas y minúsculas).Es importante notar la siguiente diferencia entre las dos técnicas:
$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
A partir de esto, puede ver que el
string.split()
método :Mientras que el
-split
operador :fuente
-split
toma una expresión regular (expresión regular) como su (primer) operando RHS, mientras que el método[string]
del tipo.Split()
opera en un carácter literal / matriz de caracteres / y, en .NET Core , también una cadena literal . Además, tenga en cuenta que la sintaxis adecuada en PowerShell es$Str -split '<BR />'
; mientras sintaxis pseudo-método$Str -Split("<BR />")
pasa a trabajo en este caso, es que debe evitarse.Prueba esto:
$Object = 'FirstPart SecondPart' | ConvertFrom-String -PropertyNames Val1, Val2 $Object.Val1 $Object.Val2
fuente
ConvertFrom-String
es obsoleto y debe evitarse (siempre tuvo una sensación experimental y el hecho de que no se haya incluido en PowerShell Core, donde se centran los esfuerzos de desarrollo futuros, indica que no está aquí para quedarse). En cuanto a la necesidad de manipulación adicional: una tarea de desestructuración servirá:$val1, $val2 = 'FirstPart SecondPart' -split ' '
ConvertFrom-String
los problemas inherentes son razón suficiente para evitarlo. Esto se aplica especialmente al análisis basado en plantillas, pero incluso el análisis basado en delimitadores es defectuoso debido a la inferencia de tipo que se aplica invariablemente ; consulte stackoverflow.com/a/50166580/45375 .Declaración de operación de foreach-object:
$a,$b = 'hi.there' | foreach split . $a,$b hi there
fuente