適材適所

PowerShellやVBAなどプログラミング系の話多めで

PowerShellで文字列を切り出す方法 4選

PowerShellで文字列を操作するときは、

.NETのSystem.Stringオブジェクトである自分自身が持つ

強力なメソッドで大抵のことができてしまいます。

もちろん文字列の切り出しメソッドも備わっています。

しかし、方法は、それだけではありません!!

ということで、

今回はPowerShellでの文字列の切り出し方法をまとめてみました。

王道!SubStringメソッド

まずは、これ。

PoewrShellでは

文字列=System.Stringクラスなので、

文字列自身に切り出し用のメソッドが備わっています。

文字列にドットでつなげればインテリセンスが働いて簡単に呼び出せます。

また、JavaやJavaScriptなどのメジャーな言語でも同じ機能がありますね。

 
#1文字目から2文字⇒12
'12345'.Substring(0,2)
#4文字目から最後まで
'12345'.Substring(3)
#3文字目から2文字⇒34
'12345'.Substring(2,2)

ちょっとややこしいのは、開始文字が0からカウントされること。

そこだけ注意が必要です。

慣れれば個人的には、

これが一番使いやすいかも。

VisualBasicのLeft、Right、Mid

Visual Basicに慣れ親しんだ人は

Visual BasicからLeft、Right、Midメソッドを呼び出すのもありかも知れません。

 
#VisualBasicを追加する
Add-Type -AssemblyName Microsoft.VisualBasic
#左から2文字(半角、全角関係なしに2文字)⇒12
[Microsoft.VisualBasic.Strings]::Left('12345',2)
#右から2文字⇒45
[Microsoft.VisualBasic.Strings]::Right('12345',2)
#3文字目から2文字⇒34
[Microsoft.VisualBasic.Strings]::Mid('12345',3,2)

Add-Typeで追加する手間がちょっとマイナスポイントですね。

Substringと比較すると、

こちらはやりたいことが明確で、

直感的なので可読性は〇ですね!

配列を経由する

PowerShellの文字列は文字の配列的なものなので、

インデックスで個々の文字にアクセスすることができます。

さらに配列スライスと -join演算子を組み合わせることで

自在に文字列を切り出すことができます。

Pythonチックな切り出し方。

 
#左から2文字⇒12
'12345'[0..1] -join ''
#右から2文字⇒45
'12345'[-2..-1] -join ''
#3文字目から2文字⇒34
'12345'[2..3] -join ''
#最初と最後の文字⇒15
'12345'[0,-1] -join ''

こちらも結構直感的で、しかも応用範囲が広そうです。

Pythonに親しんでいる人はこれもありかも。

ちょっと玄人っぽく正規表現を使う

これはちょっとマニアックな方法です。

正規表現と、$Matches自動変数を組み合わせて抽出する方法。

 
#左から2文字⇒12
[void]('12345' -match '^\w{2}');$Matches[0]
#右から2文字⇒45
[void]('12345' -match '\w{2}$');$Matches[0]
#3文字目から2文字⇒34
[void]('12345' -match '^\w{2}(\w{2})');$Matches[1]

難点はなんといっても正規表現の学習コストです。

しかし、逆に正規表現を自在に使いこなせれば、

文字数で指定、という方法に囚われることなく、

自由自在に文字列を切り出せます。

でもこれくらいの処理だと、

後で見返したときに、

「これは、何をしようとしているんだ・・・?」

となる可能性が高いので、

おとなしくSubstringを使うのがベターかも。

こんな方法もあるよ、くらいに頭の片隅に置いておいていただければ・・・。

終わりに

PowerShellで文字列を切り出す方法の紹介でした。

思いつく切り出す方法を紹介しましたが、

もしかしたら別の方法もあるかも知れません。

こんな方法もあるよ、的なコメント絶賛募集中です。

どの方法にもメリットデメリットがありますので、

ご自身の環境に合わせて使い分けていただければと思います。

ここまでお読みいただき、ありがとうございました。

PowerShellで文字列を扱う関連記事

www.tekizai.net

www.tekizai.net

www.tekizai.net

www.tekizai.net