about_Split

適用於: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

主題

about_Split

簡短描述

說明如何使用分割運算子將一或多個字串分割成子字串。

詳細描述

分割運算子會將一或多個字串分割成子字串。您可以變更下列分割作業的元素:

  • -- 分隔符號。預設值是空白字元,但是您可以指定字元、字串、模式或指定分隔符號的指令碼區塊。Windows PowerShell® 中的分割運算子在分隔符號中使用規則運算式,而不是一個簡單的字元。

  • -- 子字串數目最大值。預設值是傳回所有子字串。如果您指定小於子字串數目的數字,其餘的子字串會串連在最後一個子字串中。

  • -- 用來指定哪一個分隔符號是符合 (例如 SimpleMatch 和 Multiline) 之條件的選項。

語法

下圖顯示 -split 運算子的語法。

在命令中看不到參數名稱。僅包含參數值。值必須以語法圖表中所指定的順序出現。

-Split <String>

<String> -Split <Delimiter>[,<Max-substrings>[,"<Options>"]]

<String> -Split {<ScriptBlock>} [,<Max-substrings>]

您可以在任何二元分割陳述式 (包含分隔符號或指令碼區塊的分割陳述式) 中以 -iSplit 或 -cSplit 取代 -split。-iSplit 和 -split 運算子不區分大小寫。-CSplit 運算子區分大小寫,也就是說套用分隔符號規則時會考慮大小寫。

參數

  • <String>
    指定要分割的一或多個字串。如果您提交多個字串,會使用相同的分隔符號規則分割所有字串。範例:

              -split "red yellow blue green"
              red
              yellow
              blue
              green
    
  • <Delimiter>
    識別子字串結尾的字元。預設的分隔符號是空白字元,包括空格和不可列印字元,例如新行字元 (`n) 和定位字元 (`t)。當分割字串時,會略過所有子字串的分隔符號。範例:

              "Lastname:FirstName:Address" -split ":"
              Lastname
              FirstName
              Address
    

    根據預設,會略過結果中的分隔符號。若要保留所有或部分分隔符號,以括號括住您想要保留的部分。如果加入 <Max-substrings> 參數,當您的命令分割集合時,它的優先順序較高。如果您選擇包含分隔符號作為輸出的一部分,此命令會傳回分隔符號作為輸出的一部分,不過,分割字串以傳回分隔符號作為輸出的一部分並不會計算為分割。範例:

              "Lastname:FirstName:Address" -split "(:)"
              Lastname
              :
              FirstName
              :
              Address    
    
    
              "Lastname/:/FirstName/:/Address" -split "/(:)/"
              Lastname
              :
              FirstName
              :    
              Address
    

    在下列範例中,<Max-substrings> 設為 3。這會導致字串值的三個分割,但是產生的輸出中共有五個字串;分隔符號是包含在分割之後,直到達到三個子字串的最大值。最後一個子字串中的其他分隔符號會成為子字串的一部分。

             'Chocolate-Vanilla-Strawberry-Blueberry' -split '(-)', 3;
    
             Chocolate
             -
             Vanilla
             -
             Strawberry-Blueberry
    
  • <Max-substrings>
    指定字串分割次數的最大值。預設值是以分隔符號分割的所有子字串。如果子字串較多,它們會串連到最後一個子字串。如果子字串較少,則會傳回所有子字串。值為 0 和負值會傳回所有子字串。

    Max-substrings 不會指定傳回物件的最大數目,其值等於字串分割次數的最大值。如果您將一個以上的字串 (字串陣列) 提交至分割運算子,則 Max-substrings 限制會分別套用至每個字串。範例:

              $c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune"
              $c -split ",", 5
              Mercury
              Venus
              Earth
              Mars
              Jupiter,Saturn,Uranus,Neptune
    
  • <ScriptBlock>
    指定套用分隔符號之規則的運算式。運算式必須評估為 $true 或 $false。以大括號括住指令碼區塊。範例:

                $c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune"
              $c -split {$_ -eq "e" -or $_ -eq "p"}
              M
              rcury,V
              nus,Earth,Mars,Ju
              it
              r,Saturn,Uranus,N
    
              tun
    
  • <選項>
    將選項名稱括在引號中。選項只有在 <Max-substrings> 參數用於陳述式中時才有效。

    選項參數的語法是:

        "SimpleMatch [,IgnoreCase]"
    
                "[RegexMatch] [,IgnoreCase] [,CultureInvariant]
                [,IgnorePatternWhitespace] [,ExplicitCapture] 
                [,Singleline | ,Multiline]"
    

    SimpleMatch 選項如下:

    • -- SimpleMatch:評估分隔符號時使用簡單的字串比較。無法搭配 RegexMatch 使用。

    • -- IgnoreCase:強制不區分大小寫比對,即使已指定 -cSplit 運算子。

    RegexMatch 選項如下:

    1. -- RegexMatch:使用規則運算式比對來評估分隔符號。這是預設行為。無法搭配 SimpleMatch 使用。

    2. -- IgnoreCase:強制不區分大小寫比對,即使已指定 -cSplit 運算子。

    3. -- CultureInvariant:評估分隔符號時會忽略語言的文化特性差異。只有在搭配 RegexMatch 使用時有效。

    4. -- IgnorePatternWhitespace:會忽略未逸出的空白字元和以數字符號 (#) 標示的註解。只有在搭配 RegexMatch 使用時有效。

    5. -- Multiline:Multiline 模式會辨識行和字串的開始和結束。只有在搭配 RegexMatch 使用時有效。預設值為 Singleline。

    6. -- Singleline:Singleline 模式只會辨識字串的開始和結束。只有在搭配 RegexMatch 使用時有效。預設值為 Singleline。

    7. -- ExplicitCapture:會忽略非具名的相符群組,如此在結果清單中僅會傳回明確擷取群組。只有在搭配 RegexMatch 使用時有效。

一元和二元分割運算子

一元分割運算子 (-split <string>) 的優先順序高於逗號。因此,如果將逗號分隔的字串清單送出至一元分割運算子,只會分割第一個字串 (在第一個逗號之前)。

若要分割多個字串,使用二元分割運算子 (<string> -split <delimiter>)。使用括號括住所有字串,或將字串儲存在變數中,再將變數提交至分割運算子。

請考慮下列範例:

        -split "1 2", "a b"
        1
        2
        a b


        "1 2", "a b" -split " "
        1
        2
        a
        b


        -split ("1 2", "a b")
        1
        2
        a
        b

        $a = "1 2", "a b"
        -split $a
        1
        2
        a
        b

範例

下列陳述式會在空白字元處分隔字串。

        C:\PS> -split "Windows PowerShell 2.0`nWindows PowerShell with remoting"

        Windows
        PowerShell
        2.0
        Windows
        PowerShell
        with
        remoting

下列陳述式會在任何逗號處分割字串。

        C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split ','

        Mercury
        Venus
        Earth 
        Mars
        Jupiter
        Saturn
        Uranus
        Neptune

下列陳述式會在模式 "er" 分隔字串。

        C:\PS>"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split 'er'

        M
        cury,Venus,Earth,Mars,Jupit
        ,Saturn,Uranus,Neptune

下列陳述式會在字母 "N" 執行區分大小寫分割。

        C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -cSplit 'N'

        Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,
        eptune

下列陳述式會在 "e" 和 "t" 處分割字串。

        C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split '[et]'

        M
        rcury,V
        nus,
        ar
        h,Mars,Jupi

        r,Sa
        urn,Uranus,N
        p
        un

下列陳述式會在 "e" 和 "r" 處分割字串,但是會將產生的子字串限制為六個子字串。

        C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split '[er]', 6

        M

        cu
        y,V
        nus,
        arth,Mars,Jupiter,Saturn,Uranus,Neptune

下列陳述式會將字串分割成三個子字串。

        C:\PS> "a,b,c,d,e,f,g,h" -split ",", 3

        a
        b
        c,d,e,f,g,h

下列陳述式會將兩個字串分割成三個子字串。(限制會分別套用至每個字串。)

        C:\PS> "a,b,c,d", "e,f,g,h" -split ",", 3

        a
        b
        c,d
        e
        f
        g,h

下列陳述式會在 here-string 的第一個數字分割每行。它會使用 Multiline 選項來辨識每行和字串的開頭。

0 表示 Max-substrings 參數的「傳回所有」值。您可以只在指定 Max-substrings 值時使用選項,例如 Multiline。

        C:\PS> $a = @'
        1The first line.
        2The second line.
        3The third of three lines.
        '@
        
        C:\PS> $a -split "^\d", 0, "multiline"
        
        The first line.


        The second line.


        The third of three lines.

下列陳述式會使用 SimpleMatch 選項來指示 -split 運算子逐字解譯 (.) 分隔符號。

使用預設值 RegexMatch,以引號括住的點 (".") 會被解譯為符合新行字元以外的任何字元。如此一來,分割陳述式會針對新行字元以外的每個字元傳回空白行。

0 表示 Max-substrings 參數的「傳回所有」值。您可以只在 Max-substrings 值受到指定時使用選項 (例如 SimpleMatch)。

        C:\PS> "This.is.a.test" -split ".", 0, "simplematch"

        This
        is
        a 
        test

下列陳述式會依變數的值而定,以兩個分隔符號的其中一個來分隔字串。

        C:\PS> $i = 1
        C:\PS> $c = "LastName, FirstName; Address, City, State, Zip"
        C:\PS> $c -split {if ($i -lt 1) {$_ -eq ","} else {$_ -eq ";"}}

        LastName, FirstName
         Address, City, State, Zip

下列陳述式會先用角括弧,再以分號分割 XML 檔案。結果是 XML 檔案的可讀取版本。

        C:\PS> get-process PowerShell | export-clixml ps.xml
        C:\PS> $x = import-clixml ps.xml
        C:\PS> $x = $x -split "<"
        C:\PS> $x = $x -split ";"

若要顯示結果,請輸入 "$x"。

        C:\PS> $x

        @{__NounName=Process
        Name=PowerShell
        Handles=428
        VM=150081536
        WS=34840576
        PM=36253696
        ...

另請參閱

Split-Path

about_Operators

about_Comparison_Operators

about_Join