使用英语阅读

通过


about_Split

应用到: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.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 运算符区分大小写,这意味着在应用分隔符规则时,应考虑大小写。

参数

  • <字符串>
    指定要拆分的一个或多个字符串。如果提交多个字符串,则所有字符串均使用同一分隔符规则拆分。例如:

              -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。其导致对字符串值进行 3 次拆分,但产生的输出中共有 5 个字符串;拆分后包括了分隔符,直到达到 3 个子字符串的最大值。最后一个子字符中的其他分隔符将成为子字符串的一部分。

             'Chocolate-Vanilla-Strawberry-Blueberry' -split '(-)', 3;
    
             Chocolate
             -
             Vanilla
             -
             Strawberry-Blueberry
    
  • <Max-substrings>
    指定一个字符串的最大拆分次数。默认所有子字符串均由分隔符拆分。如有子字符串数目大于该最大拆分次数,则它们将连接到最后一个子字符串。如有子字符串数目小于该最大拆分次数,则将返回所有子字符串。值为 0 和负数时将返回所有子字符串。

    Max-substrings 不指定返回的最大对象数;其值等于一个字符串的最大拆分次数。如果将多个字符串(一个字符串数组)提交到拆分运算符,则 Max-substrings 限制将分别应用于每个字符串。m例如:

              $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> 参数时有效。

    Options 参数的语法为:

        "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:多行模式将识别行和字符串的开头和末尾。仅在与 RegexMatch 一同使用时有效。默认值为 Singleline。

    6. -- 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