about_Split

主题
    about_Split

简短说明
    说明如何使用拆分运算符将一个或多个字符串拆分为多个子字符串。

详细说明
    拆分运算符用于将一个或多个字符串拆分为多个子字符串。可更改拆分操作的以下元素:
    
    -- 定界符。默认为空白,但是可指定字符、字符串、模式或用于设置定界符的脚本块。
    
    -- 子字符串的最大数目。默认设置为返回所有子字符串。如果指定的数字小于子字符串数,
       则其余子字符串将合并到最后一个子字符串中。

    -- 用于指定定界符匹配条件的选项,如 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>
        指定返回的子字符串的最大数目。默认设置为通过定界符拆分出的所有子字符串。
        如果子字符串数目大于最大数目,多出的子字符串将合并到最后一个子字符串中。如果子字符串数目
        小于最大数目,将返回所有子字符串。使用 0 值或负值时将返回所有子字符串。

        如果向拆分运算符提交多个字符串(一组字符串),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,Neptu
            ne" $c -split {$_ -eq "e" -or $_ -eq "p"}
        M
        rcury,V
        nus,Earth,Mars,Ju
        it
        r,Saturn,Uranus,N
    
        tun

    <Options>
        请将选项名称括在引号内。仅当语句中使用 <Max-substrings> 参数时选项才有效。

        Options 参数的语法为:

        "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 <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"拆分字符串,但将生成的子字符串数限制为 6 个。

        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