.NET開発者のためのブログメディア

PowerShellでのSplitによる文字列の分割とは?基本を紹介!
目次
PowerShellでのSplitによる文字列の分割
今回は、PowerShellでのSplitによる文字列の分割方法について説明します。
Splitを使えば、文字列に対してデリミタを指定して文字列分割ができます。デリミタには正規表現を指定することもできますし、複数のデリミタを指定することもできます。
PowerShellでのSplitによる文字列の分割に興味のある方はぜひご覧ください。
基本的な使い方
Splitによる文字列分割の基本的な使い方を紹介します。ここではカンマ区切りの文字列を分割します。
Splitの引数にデリミタを指定することで分割できます。
1 2 3 4 5 6 7 8 9 |
PS C:\> $str = “item1,item2,item3,item4,item5” PS C:\> $array = $str.Split(“,”) PS C:\> foreach ($i in $array) { Write-Host $i } item1 item2 item3 item4 item5 PS C:\> |
デリミタを半角スペースに変更して実施してみます。
1 2 3 4 5 6 7 8 9 |
PS C:\> $str = “item1 item2 item3 item4 item5” PS C:\> $array = $str.Split(“ “) PS C:\> foreach ($i in $array) { Write-Host $i } item1 item2 item3 item4 item5 PS C:\> |
このように、PowerShellではSplitで文字列分割できます。
分割数の指定
Splitの第2引数に分割数を指定できます。
1 2 3 4 5 6 7 |
PS C:\> $str = “item1,item2,item3,item4,item5” PS C:\> $array = $str.Split(“,”,3) PS C:\> foreach ($i in $array) { Write-Host $i } item1 item2 item3,item4,item5 PS C:\> |
分割数を3に指定しているので、3つ目以降は1つにまとめられていることが分かります。
このように、PowerShellではSplitの第2引数に分割数を指定できます。
複数の変数を同時に設定
Splitの戻り値を複数の変数に同時に設定できます。
Splitの左辺にカンマ区切りで変数を記載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
PS C:\> $str = “item1,item2,item3,item4,item5” PS C:\> $val1,$val2,$val3,$val4,$val5 = $str.Split(“,”) PS C:\> Write-Host $val1 item1 PS C:\> Write-Host $val2 item2 PS C:\> Write-Host $val3 item3 PS C:\> Write-Host $val4 item4 PS C:\> Write-Host $val5 item5 PS C:\> |
変数に値が格納できていることが分かります。
では、左辺の変数を少なくするとどうなるでしょうか。
1 2 3 4 5 6 7 |
PS C:\> $str = “item1,item2,item3,item4,item5” PS C:\> $val1,$val2 = $str.Split(“,”) PS C:\> Write-Host $val1 item1 PS C:\> Write-Host $val2 item2 item3 item4 item5 PS C:\> |
2つ目以降は1つにまとめられていることが分かります。
このように、PowerShellではSplitの戻り値を複数の変数に同時に設定できます。
改行
改行などの特殊文字をデリミタに指定するケースを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
PS C:\> $str = @” >> item1 >> item2 >> item3 >> item4 >> item5 >> “@ PS C:\> $array = $str.Split(“\r\n”) PS C:\> foreach ($i in $array) { Write-Host $i } item1 item2 item3 item4 item5 PS C:\> |
改行の場合は、デリミタに「\r\n」を指定します。
正規表現
デリミタが連続する場合は、以下のように空文字として分割されます。
1 2 3 4 5 6 7 8 9 10 |
PS C:\> $str = “item1,item2,item3,,item4,item5” PS C:\> $array = $str.Split(“,”) PS C:\> foreach ($i in $array) { Write-Host $i } item1 item2 item3 item4 item5 PS C:\> |
空文字として分割したくない場合、-splitを使用し、さらに正規表現を使用します。
1 2 3 4 5 6 7 8 9 |
PS C:\> $str = “item1,item2,item3,,item4,item5” PS C:\> $array = $str -split ',+' PS C:\> foreach ($i in $array) { Write-Host $i } item1 item2 item3 item4 item5 PS C:\> |
‘,+’は、’,’が1回以上続くという意味です。これをデリミタにして分割することで、空文字を除去することができます。
半角スペースの場合も見てみましょう。
1 2 3 4 5 6 7 8 9 |
PS C:\> $str = “item1 item2 item3 item4 item5” PS C:\> $array = $str -split ' +' PS C:\> foreach ($i in $array) { Write-Host $i } item1 item2 item3 item4 item5 PS C:\> |
このように、PowerShellでは正規表現を利用して文字列分割できます。
複数のデリミタ
Splitには、デリミタを複数指定することもできます。
1 2 3 4 5 6 7 8 9 |
PS C:\> $str = “item1,item2:item3,item4,item5” PS C:\> $array = $str.Split((',',':'), 'None') PS C:\> foreach ($i in $array) { Write-Host $i } item1 item2 item3 item4 item5 PS C:\> |
‘,’または’:’をデリミタとして文字列分割されていることが分かります。
csvファイルにSplit
カンマ区切りのcsvファイルに対してSplitを使用する例を紹介します。
指定のカラムを抽出することもできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
PS C:\> Get-Content test\test.csv 1,2,3,4,5 6,7,8,9,10 11,12,13,14,15 16,17,18,19,20 21,22,23,24,25 PS C:\> Get-Content test\test.csv | %{ $_.Split(“,”)[1] } 2 7 12 17 22 PS C:\> |
インデックス1を指定することで、指定カラムのみ抽出できていることが分かります。
パスの分割
Split-Pathを使用すれば、パス文字列を分割することができます。
1 2 3 4 5 6 7 8 |
PS C:\> $path =“C:\path\to\folder” PS C:\> $val = Split-Path $path -Qualifier PS C:\> Write-Host $val C: PS C:\> $val = Split-Path $path -noQualifier PS C:\> Write-Host $val \path\to\folder PS C:\> |
Qualifierでドライブを出力、noQualifierでドライブ以外を出力できます。
まとめ
いかがでしたでしょうか。
PowerShellでのSplitによる文字列の分割方法について説明しました。
Splitを使えば、文字列に対してデリミタを指定して文字列分割ができます。デリミタには正規表現を指定することもできますし、複数のデリミタを指定することもできます。
ぜひご自身でPowerShellのコマンドを書いて、理解を深めてください。