共用方式為


about_split

主題
    about_Split

簡短描述
    說明如何使用 split 運算子將一個或多個字串分割為子字串。

完整描述
    split 運算子會將一個或多個字串分割為子字串。您可以變更下列分割操作的元素:
    
    -- 分隔字元: 預設為空白字元,但是您可以指定字元、字串、模式或指令碼區
           塊來指定分隔字元。
    
    -- 子字串數目的上限: 預設為傳回所有子字串。如果您指定的數目少於子字串
           的數目,則其餘子字串會串連於最後一個子字串。

    -- 指定分隔字元須符合之條件的選項,例如 SimpleMatch 和 Multiline。


  語法

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

   參數名稱不會出現在命令中,只包含參數值。值必須依照語法圖表中指定的順序出現。

    -Split <字串>

    <字串> -Split <分隔字元>[,<子字串數目上限>[,"<選項>"]]

    <字串> -Split {<指令碼區塊>} [,<子字串數目上限>]

   您可以在任何 split 陳述式中以 -iSplit 或 -cSplit 取代 -split。
   -iSplit 和 -split 運算子不區分大小寫。-cSplit 運算子區分大小寫,也就是說,
    套用分隔字元規則時應考慮大小寫。


  參數

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

        -split "red yellow blue green"
        red
            yellow
        blue
        green

   <分隔字元>
        識別子字串結尾的字元。預設分隔字元是空白字元,包括空格和無法列印的字
        元,例如新行 (`n) 和 Tab (`t)。當分割字串時,會省略所有子字串中的分隔
        字元。範例:

        "Lastname:FirstName:Address" -split ":"
        Lastname
        FirstName
        Address
    
    <子字串數目上限>
        指定傳回的子字串數目上限。預設為分隔字元分割的所有子字串。如果有較多的
        子字串,則會串連於最後一個子字串。如果子字串較少,則會傳回所有子字串。
        0 值和負值會傳回所有子字串。

        如果您提交多個字串 (字串陣列) 至 split 運算子,則會分別對每一個字串套用
        子字串數目上限。範例:

        $c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" $c 
        -split ",", 5
        Mercury
        Venus
        Earth
        Mars
        Jupiter,Saturn,Uranus,Neptune
    

    <指令碼區塊>
        指定套用分隔字元之規則的運算式。運算式必須評估為 $true 或 $false。請以
        大括號括住指令碼區塊。範例:
    
            $c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptu
            ne" $c -split {$_ -eq "e" -or $_ -eq "p"}
        M
        rcury,V
        nus,Earth,Mars,Ju
        it
        r,Saturn,Uranus,N
    
        tun

    <選項>
        請以引號括住選項名稱。只有當在陳述式中使用 <子字串數目上限> 參數時,
        選項參數才有效。

        選項參數的語法為:

        "SimpleMatch [,IgnoreCase]"

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

 
        SimpleMatch 選項為:
            
          -- SimpleMatch:評估分隔字元時,請使用簡單字串比較。無法搭配 
             RegexMatch 使用。

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


        RegexMatch 選項為:

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

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

          -- CultureInvariant:評估分隔字元時,忽略語言中的文化特性差異。僅適
             用於 RegexMatch。

          -- IgnorePatternWhitespace:忽略以數字符號 (#) 標示的未逸出空白字元
             和註解。僅適用於 RegexMatch。

          -- Multiline:Multiline 模式會辨識行和字串的開頭和結尾。僅適用於 
             RegexMatch。預設為 Singleline。

          -- Singleline:Singleline 模式僅辨識字串的開頭和結尾。僅適用於 
             RegexMatch。預設為 Singleline。

          -- ExplicitCapture:忽略非具名的比對群組,使結果清單中只會傳回明確
             的擷取群組。僅適用於 RegexMatch。
    

  一元和二元分割運算子

    一元分割運算子 (-split <字串>) 的優先順序高於逗號。因此,如果您提交逗號分
    隔的字串清單給一元分割運算子,則只會分割第一個字串 (位於第一個逗號前)。
    
    若要分割多個字串,請使用二元分割運算子 (<字串> -split <分隔字元>)。請以括
    號括住所有字串,或是將字串儲存在變數中,然後將變數提交給分割運算子。
    
    請看以下範例:

    -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 代表「子字串數目上限」參數的「全部傳回」值。您只能在指定子字串數目上限值
    時使用選項,例如 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 時,以引號括住的句號 (".") 會解譯為符合新行字元以外
    的任何字元。因此,split 陳述式會針對新行以外的每一個字元傳回一個空白行。

    0 代表「子字串數目上限」參數的「全部傳回」值。您只能在指定子字串數目上限值
    時使用選項,例如 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
        
    

    下列 split 陳述式會先在角括弧處分割 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