主题
    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




目录