PowerShell: 文字列の切り出し Substring

PowerShellで文字列の切り出しを行う場合は .NET Framework Stringクラスの Substring メソッドを利用します。 切り出し開始位置と文字数を指定することで部分文字列を取得できます。 Substringメソッドの書式は次の通りです。

書式
文字列.String(取得開始位置 [, 取得文字数])

第1引数で取得開始位置を指定し、 第2引数で取得文字数を指定します。 第2引数を省略した場合は、取得開始位置から最後までの文字列を返します。 引数にマイナスの値を指定するとことは出来ません。

次のサンプルコードでは、 Substringメソッドを使って文字列の切り出しを行っています。

$s = "abcde"

Write-Host ($s.Substring(0, 3)) # abc

Write-Host ($s.Substring(1, 3)) # bcd

# 第2引数を省略
Write-Host ($s.Substring(1))    # bcde

第1引数に0を指定した場合は先頭から取得し、 第2引数を省略した場合は最後までを取得しています。

Left()やRight()を実現する方法

.NET FrameworkのStringクラスにはLeftメソッド(左端から切り出し)や、 Rightメソッド(右端から切り出し)がありません。 代わりにSubstringメソッドを使って同じ機能を実現します。

Left 左端から切り出し

Substringメソッドの第1引数に0を指定すると、 先頭(左端)からの文字列取得になります。

# 取得文字数
$n = 3

$s = "abcde"

Write-Host ($s.Substring(0, $n)) # abc

Right 右端から切り出し

右端から指定文字数を切り出したい場合は、 第1引数に「文字数 - 取得文字数」を指定します。 第2引数は省略するか、「取得文字数」を指定します。

# 取得文字数
$n = 3

$s = "abcde"

# 第2引数省略
Write-Host ($s.Substring($s.Length - $n)) # cde

# 第2引数指定
Write-Host ($s.Substring($s.Length - $n, $n)) # cde

上のコードの場合、第1引数の「文字数 - 取得文字数」は 「5 - 3」なので「2」となります。 あとは最後まで取得するだけです。

参考サイト
String.Substring メソッド (System) | Microsoft Docs

PowerShell