komekichix’s diary

日々の仕事、生活でぶち当たった問題の解決策を書き残しています。あなたのお役に立てれば幸いです。

正規表現を使ってテキストファイル内の数値を0埋めして桁数を揃える方法

テキストファイル内の数値を0埋め(ゼロパディング)して任意の桁数に揃えたいことがあったので、やり方を書いておきます。
まずは、テキストエディタ正規表現を使って置換を行う方法。
その後に、コマンド(sed)を使った方法も載せておきます。
そして、応用編として時間表記の0埋めも考えてみました。

1.テキストエディタで0埋めしてみる

 123
 0045
 10

などを前ゼロ埋め5桁に変換したい場合のやり方。
2段階に分けて置換を行います。

(1)数字の前に0を入れて桁を増やす

 テキストエディタの置換機能を使って数字の前に揃えたい桁数以上の0を挿入します。

 置換前 ([0-9]+)
 置換後 00000$1
  ↓
 00000123
 000000045
 0000010

()はグループを表します。複数使用した場合は先頭から順に、$1$2$3...で利用できます。
秀丸では¥1¥2¥3...と¥文字を使います。
各エディタとも「正規表現」をオンにするのを忘れずに。

サクラエディタの場合
秀丸エディタの場合
Atomエディタの場合

 

(2)必要な桁数以上を削除する

 揃えたい桁数だけを残します。

 置換前 (0*)([0-9]{5})  ・・5桁残したい場合は{5}とします。
 置換後 $2
  ↓
 00123
 00045
 00010

サクラエディタの場合
秀丸エディタの場合
Atomエディタの場合

 

2.sedコマンドで0埋めしてみる

 sedコマンドを使えば、もっと楽に一気に変換出来ます。

 cat test.txt | sed -E "s/([0-9]+)/00000\1/g" | sed -E "s/(0*)([0-9]{5})/\2/g"
  ↓
 00123
 00045
 00010

 \はエスケープ文字です。バックスラッシュか¥マークを使います。

3.時刻表示への応用

 応用として時刻の0埋めも可能です。

  1:14
  17:13
  9:03

 時刻に前ゼロをつけて桁を合わせたい場合のやり方。
 2段階に分けて置換を行います。

(1)置換で時刻の先頭に0を入れます。

 置換前 ([0-9]+):([0-9][0-9])
 置換後 0$1:$2
 ↓
 01:14
 017:13
 09:03

(2)「:」の左2文字だけを残します。
 置換前 (0*)([0-9][0-9]):([0-9][0-9])
 置換後 $2:$3
 ↓
 01:14
 17:13
 09:03

 

 

以上です。