Powershellを使っていると文字列処理をすることが多くありますよね。ただ、他の言語と混ぜこぜになってしまっているとやり方がすぐに出てこないのでメモ的に残しておきます。
ここでは郵便番号や電話番号の処理でハイフンを取り除く方法とメールアドレスの処理で@の前半を抽出する方法を紹介します。
replaceを利用する方法
replaceを利用することで特定文字列の除去や置き換えを行うことができます。注意点として?などの特殊文字はバックスラッシュ(¥)でエスケープする必要があります。
Write-Host '[Test1]:replaceを使って文字列置換'
$test01 = 'abc-def-123-456' # 例
Write-host 'ハイフンを取り除く'
$test01 -replace "-",""
Write-host 'ハイフンを空白に置き換える'
$test01 -replace "-"," "
Write-host 'bを除く'
$test01 -replace "b",""
Write-host '数字を除く'
$test01 -replace "[0-9]",""
Write-Host '[Test2]:replaceを使って文字列置換(特殊文字)'
$test02 = 'abc?def*123-456' # 例
Write-host '?を取り除く,エスケープ文字(バックスラッシュ)\が必要'
$test02 -replace "\?",""
[Test1]:replaceを使って文字列置換
ハイフンを取り除く
abcdef123456
ハイフンを空白に置き換える
abc def 123 456
bを除く
ac-def-123-456
数字を除く
abc-def--
[Test2]:replaceを使って文字列置換(特殊文字)
?を取り除く,エスケープ文字(バックスラッシュ)\が必要
abcdef*123-456
バックスラッシュ(¥)でエスケープする必要がある特殊文字
「$」「()」「*」「+」「.」「[]」「?」「\」「/」「^」「{}」「|」
正規表現の$matchesを利用する方法
よくあるパターンの例としてメールアドレスの@マークより左側を抽出する方法を紹介します。PowerShellの正規表現(-match)を利用すると$Matchesというシステムのシェル変数に自動的にマッチ情報が入ります。これはかなり便利に利用できます。
※カッコで囲むことでマッチ情報が$Matchesに格納されていきます。
@マークは`(グレイヴ・アクセント?というみたいです)でエスケープする必要があります( ¥ではないので注意です)
Write-host 'メールアドレスの@マークの前を抽出する'
$mail = 'hogehoge.hoge@gmail.com'
if($mail -match "(.*)`@(.*)"){
$matches[1] # hogehoge.hoge
$matches[0] # hogehoge.hoge@gmail.com
$matches[2] # gmail.com
}
メールアドレスの@マークの前を抽出する
hogehoge.hoge
hogehoge.hoge@gmail.com
gmail.com
以上です。
コメント