文字列から PowerShell 部分文字列を抽出する

John Wachira 2023年6月21日
  1. Substring() メソッドを使用して PowerShell 部分文字列を抽出する
  2. 文字列の左側にある PowerShell 部分文字列を抽出する
  3. 指定した文字の前後の PowerShell 部分文字列を抽出する
  4. 2つの文字の間の PowerShell 部分文字列を抽出する
文字列から PowerShell 部分文字列を抽出する

この記事では、PowerShell で文字列から部分文字列を抽出する方法について説明します。 部分文字列は単に文字列の一部です。

Substring() および split() メソッドを使用して、PowerShell で部分文字列を作成できます。 たとえば、Delftstack.com という文字列がある場合、Delftstack は部分文字列であり、com は別の文字列です。

この記事では、Substring() メソッドについて説明します。

Substring() メソッドを使用して PowerShell 部分文字列を抽出する

Substring() メソッドの構文を見てみましょう。

string.Substring(int startIndex, int length)

構文の int は、startIndexlength をインデックス番号としてマークします。 startIndex は抽出する部分文字列の最初の文字を示し、length は文字列から抽出する文字数です。

IndexOf メソッドを使用して、部分文字列の startIndexlength を決定します。

IndexOf 部分文字列の結果の値に 1 を追加することにより、startIndex を決定します。 例を見てみましょう。

ned.delftstack.com が文字列であるとすると、文字列の最初の文字 n のインデックス位置は? 以下のコマンドを実行して位置を特定できます。

"ned.delftstack.com".IndexOf('n')

結果は≪0≫です。 これは、IndexOf メソッドが最初に出現する文字列を左から右に検索し、常に 0 から開始するためです。

したがって、文字 n から始まる部分文字列を抽出する場合、startIndex は 0 になります。

LastIndexOf を使用して、文字列が最後に出現した場所を見つけることもできます。 たとえば、d の最後の文字は次のようになります。

"ned.delftstack.com".LastIndexOf('d')

この基本情報により、PowerShell で文字列を操作できるようになります。

文字列の左側にある PowerShell 部分文字列を抽出する

上記の情報を活用してみましょう。

ned.delftstack.com から部分文字列 ned を抽出したいとします。 どうすればいいでしょうか?

ourstrng という変数に文字列を保存することから始めます。

$ourstrng = "ned.delftstack.com"

Substring() メソッドの構文から、コマンドは次のようになります。

$ourstrng.Substring(0,3)

startIndex0length は 3 文字であるため、これは ned を返します。 目標が文字列から delftstack を抽出することだとしたら?

最初のステップは、部分文字列の startIndex を決定することです。 この場合、セパレータである最初のピリオドを使用します。

$ourstrng.IndexOf(".")

結果は≪3≫になります。 しかし、思い出すことができれば、文字列の最初の文字の結果に 1 を追加します。 したがって、startIndex4 になります。

長さは、部分文字列に含める文字数になります。 1 からカウントします。部分文字列 delftstack10 文字です。

$ourstrng.Substring(4,10)

これは delftstack を返します。

指定した文字の前後の PowerShell 部分文字列を抽出する

neddelftstack.com の両方を文字列から抽出したいとしましょう。 どうすればいいでしょうか?

まず、最初の . であるセパレーターの位置を決定する必要があります。 以下のコマンドは、セパレータを $sepchar という変数に保存します。

$sepchar = $ourstrng.IndexOf(".")

部分文字列を抽出するには、以下のコマンドを実行します。

$ourstrng.Substring(0,$sepchar)

これにより、ned である最初の部分が抽出されます。 他の部分文字列については、次を実行します。

$ourstrng.Substring($sepchar+1)

これにより、deftstack.com が返されます。

2つの文字の間の PowerShell 部分文字列を抽出する

文字列が ned.delftstack.com の場合、部分文字列は delftstack になります。これは、最初の期間と 2 番目の期間の間にあるためです。 このようなスクリプトには 3つのコマンドが必要です。

最初のコマンドは、最初のピリオド (.) の位置を決定し、それを変数 firstsep に保存します。

$firstsep = $ourstrng.IndexOf(".")

2 番目のコマンドは、LastIndexOf メソッドを使用してピリオドの 2 番目の位置を決定し、変数 lastrep に保存します。

$lastrep = $ourstrng.LastIndexOf(".")

最後のコマンドは、文字列から部分文字列 delftstack を抽出します。

$ourstrng.Substring($firstsep+1,$lastrep-4)

結論として、PowerShell 区切り記号の前、後、および間で、文字列内の部分文字列を抽出できます。 上で見たように、Substring() メソッドは便利です。

著者: John Wachira
John Wachira avatar John Wachira avatar

John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.

LinkedIn

関連記事 - PowerShell String