(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中的拆分運算符能夠對指定的字符串進行分隔,意味着能夠截取字符串中的指定部分,這每每用於對時間格式的截取,或是截取文件名並進行模糊查找。

相關文章
相關標籤/搜索