문자열을 개별 변수로 분할


답변:


140

이렇게?

$string = 'FirstPart SecondPart'
$a,$b = $string.split(' ')
$a
$b

7
당신이있는 경우 "FirstPart SecondPart ThirdPart"에만이하고 싶어, 당신은 사용할 수 있습니다$a,$b = $string.split(' ')[0,1]
Stoinov

$ string = 'FirstPart-SecondPart'및 $ a, $ b = $ string.split ( '-')이있는 경우 ..Trim () ($ a, $ b = $ string.split ( '-')을 추가합니다. .Trim는 ()) 후 모두 $ $ a와 b를 트리밍
mortenma71

52

-split연산자로 배열이 생성됩니다 . 그렇게

$myString="Four score and seven years ago"
$arr = $myString -split ' '
$arr # Print output
Four
score
and
seven
years
ago

특정 항목이 필요할 때 배열 인덱스를 사용하여 도달하십시오. 인덱스는 0부터 시작합니다. 그렇게

$arr[2] # 3rd element
and
$arr[4] # 5th element
years

6
또는 동등 :$arr = @($myString.split(' '))
sxc731

2
또한 한 $first_word = ("one-two-three" -split '-')[0]
information_interchange

2
@ sxc731 : .Split()항상 배열을 반환하므로 @(...): 가 필요하지 $arr = $myString.split(' ')않지만 더 많은 PowerShell-idiomatic 솔루션 $arr = $myString -split ' '인은 이미 답변의 일부입니다. 점에 유의를 수행 -split소요 정규식 과 (사용 대소 문자를 구분 -csplit대소 문자를 구분 분할의 경우).
mklement0

25

두 기술 간의 다음과 같은 차이점에 유의하는 것이 중요합니다.

$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 

이것에서 당신은 string.split() 방법을 볼 수 있습니다 :

  • 대소 문자 구분 분할을 수행합니다 ( "R"에 대한 분할 "ALL RIGHT"이지만 "r"에 분할되지 않음).
  • 문자열을 분할 가능한 문자 목록으로 처리합니다.

-split 운영자 동안 :

  • 대소 문자를 구분하지 않는 비교를 수행합니다.
  • 전체 문자열에서만 분할

4
이것들은 지적 할 좋은 차이점입니다. 또 다른 중요한 점 -split정규식 (정규식)을 (첫 번째) RHS 피연산자로 사용하는 반면 [string]형식의 .Split()메서드는 리터럴 문자 / 문자 배열 / 및-.NET Core에서 -리터럴 문자열 에서도 작동 합니다 . 또한 PowerShell의 적절한 구문은 $Str -split '<BR />'; 의사 메서드 구문은 동안 $Str -Split("<BR />") 일어나는 이 경우 작업은 피해야한다.
mklement0

9

이 시도:

$Object = 'FirstPart SecondPart' | ConvertFrom-String -PropertyNames Val1, Val2
$Object.Val1
$Object.Val2

ConvertFrom-String이 더 나은 솔루션입니다. ConvertFrom-String은 실제로 OP가 원하는 정보 문자열을 분할하고 객관화하려는 특정 의도로 설계되었습니다. 분할 커맨드 렛이 작동하는 동안 OP가 원하는 것을 얻으려면 추가 조작이 필요하며 ConvertFrom-String이 처리합니다.
danno

1
@danstermeister : 일반적으로 간단한 문자열 분할에 cmdlet 을 사용하는 것은 비효율적입니다. 특히 ConvertFrom-String노후화되어 피해야합니다 (항상 실험적인 느낌이 있었고 향후 개발 노력이 집중되는 PowerShell Core에 포함되지 않았다는 사실은 여기에 머물러 있지 않음을 나타냅니다). 추가 조작의 필요성에 관해서는 $val1, $val2 = 'FirstPart SecondPart' -split ' '
구조 분해

기본적으로 할 수 있습니다. $ Object = 'FirstPart SecondPart'| ConvertFrom-Csv -d ''-H Val1, Val2 (Core 6과 동일);)
Esperento57

1
@ mklement0-PowerShell 개발자는 필요한 백엔드 작업으로 인해 지금까지 모든 Windows 중심 항목을 가져 오지 않았지만 실제 기능 패리티에 대한 달성 속도를 늦추고 있습니다. 따라서 Windows powershell에서 특별히 더 이상 사용되지 않는 한 반드시 계산하지 않을 것입니다. 예를 들어, netadapter 명령은 가까운 미래에 이식 될 것이라고 생각하지만 현재는 존재하지 않습니다. 현재 Core에 존재하지 않는 것은 미래에 Core에 존재한다는 것을 전혀 예측할 수 없습니다. 그리고 cmdlet 효율성 문제는 드라이브 바이 스크립터가 아닌 실제 개발자에게 맡기는 것이 좋습니다.
danno

@danstermeister : 사실, 추가 정보 가 없으면 현재 부재에서 포팅 되지 않을 것이라고 추론 할 수 없습니다. 단지 우선 순위 가 아니 었습니다 . 모든 때문은, 그러나, 논쟁 지점입니다 ConvertFrom-String'의 고유 한 문제를 피하는 이유는 충분합니다. 로 인해, 특히 템플릿 기반의 분석에 적용되지만, 심지어 구분 기호 기반의 분석은 결함이 형식 유추 됩니다 변함없이 적용 - 참조 stackoverflow.com/a/50166580/45375을 .
mklement0

0

Foreach-object 작업 문 :

$a,$b = 'hi.there' | foreach split .
$a,$b

hi
there
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.