(18)Powershell中的字符串拆分运算符

    Powershell中提供了对字符串的拆分操做运算符。-split 运算符将一个字符串拆分红多个字符串。 正则表达式


拆分运算符shell

    拆分运算符用于将一个或多个字符串拆分为多个子字符串。可更改拆分操做的如下元素:bash

(1)定界符。默认为空白,可是可指定字符、字符串、模式或用于设置定界符的脚本块。ide

(2)子字符串的最大数目。默认设置为返回全部子字符串。若是指定的数字小于子字符串数,则其他子字符串将合并到最后一个子字符串中。spa

(3)用于指定定界符匹配条件的选项,如 SimpleMatch 和 Multiline。ip

    拆分运算符的语法以下(3种语法,意味着有三种使用方式):
ci

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

    须要注意的是,该运算符中没有参数的名称,只包含参数的值。因此参数值必须按语法中指定的顺序出现。-Split 运算有区分大小的格式(默认不区分大小写),-iSplit 运算符不区分大小写。-cSplit 运算符区分大小写,这意味着应用定界符规则时会考虑大小写。字符串

    下面对 -Split 运算符的参数举例说明。
string

<String>it

    指定要拆分的一个或多个字符串。若是是多个字符串,则使用给定的相同的分隔符来分割全部的字符串。例如:

PS D:\> -Split "abc def ghi"
abc
def
ghi

<Delimiter>

    分隔符,用于标识子字符串结束位置的字符(即用什么将一个字符串分割成多个子字符串)。默认定界符是空白,包括空格以及如换行符 (`n) 和制表符 (`t) 等不可打印字符。拆分字符串时,将从全部子字符串中省略定界符。例如:

PS D:\> "ab:cd:ef" -split ":"
ab
cd
ef

<Max-substrings>

    可选参数,指定返回的子字符串的最大数目。默认设置为经过定界符拆分出的全部子字符串。若是子字符串数目大于最大数目,多出的子字符串将合并到最后一个子字符串中。若是子字符串数目小于最大数目,将返回全部子字符串。使用 0 值或负值时将返回全部子字符串。

    若是向拆分运算符提交多个字符串(一组字符串),Max-substrings 限制将单独应用于每一个字符串。例如:

PS D:\> $a = "Monday,Tuesday,Wesday,Thurday,Friday,Saturday,Sunday"
PS D:\> $a -split ",", 4
Monday
Tuesday
Wesday
Thurday,Friday,Saturday,Sunday

    须要注意的是参数之间是拿逗号隔开的。

<Options>

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

Options 参数的语法为:

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


SimpleMatch 选项为: 

(1)SimpleMatch:计算定界符时使用简单字符串比较。不可与 RegexMatch 一块儿使用。

(2)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 一块儿使用时有效。

<ScriptBlock>

    用于指定定界符应用规则的表达式。该表达式的计算结果必须是 $true 或 $false。脚本块需放在大括号中。例如:

PS D:\> $a = "Monday,Tuesday,Wesday,Thurday,Friday,Saturday,Sunday"
PS D:\> $a -split {$_ -eq "n" -or $_ -eq "r"}
Mo
day,Tuesday,Wesday,Thu
day,F
iday,Satu
day,Su
day

    从上面的语句能够看出,在指定的字符串中查找指定的分隔符(本例中的是"n"或者"r"),查找到就执行分隔操做。


2. 一元和二元拆分运算符

    -split <string> 这种格式称为一元拆分运算符,它的优先级高于逗号。即,若是向一元拆分运算符提交逗号分隔的字符串列表,那么会只拆分第一个字符串(第一个逗号以前的部分)。例如:

PS D:\> -split "a b","c d"
a
b
c d

    <string> -split <delimiter> 这种格式称为二元拆分运算符。可将全部字符串都括在圆括号内,或将这些字符串存储在变量中,而后向拆分运算符提交该变量。例如:

PS D:\> "a b","c d" -split " "
a
b
c
d
PS D:\> -split ("a b","c d")
a
b
c
d
PS D:\> $a = "a b","c d"
PS D:\> -split $a
a
b
c
d

总结

    Powershell中的拆分运算符能够对指定的字符串进行分隔,意味着能够截取字符串中的指定部分,这每每用于对时间格式的截取,或是截取文件名并进行模糊查找。

相关文章
相关标签/搜索