正規表現置換で0埋めによる桁揃えをする
正規表現置換で0埋めによる桁揃えをする手順を紹介します。
概要
正規表現を利用して置換しつつ、数値の桁数を揃えたい場合があります。
この記事では、正規表現の置換を利用して数値の桁数を揃える正規表現式と手順を紹介します。
この記事では2つの方針を紹介しています。一つは数値の頭に"0"を追加してから削除する方法。
もう一つは、1桁の数値には数値の先頭に0を2つ追加、2桁の数値には数値の先頭に0を一つ追加、3桁の数値には0を追加せず。
のように桁数ごとに置換する処理を変える方法です。
桁数の種類が少ない場合は、後者の桁数ごとの置換のほうが、手順や処理がわかりやすいですが、桁数の種類が増えると置換の回数が増える欠点があります。
0を追加してから削除する方法は、処理がやや複雑ですが、桁数の種類が増えても2回の置換で処理が完了するメリットがあります。
例1A:単純な数値のみの場合で2桁にそろえる場合 (0を追加してから削除する方法)
次の文字列があります。0を埋めて2桁にそろえたいです。
4
12
8
0
2
置換処理
最初の置換ではすべての項目に0を追加します。
置換パターン | 置換文字列 | メモ |
([0-9]+) | 0$1 |
(\d+) | 0$1 | こちらの記述でも可 |
置換の結果は次の通りになります。
04
012
08
00
02
この結果を使いもう一度置換します。
置換パターン | 置換文字列 | メモ |
0*([0-9]{2,}) | $1 |
0*(\d{2,}) | $1 | こちらの記述でも可 |
{2,} は手前の文字が2回以上のの繰り返しとなることを指定しています。今回の式の場合は、
[任意個数の0][0から9までの数値が2文字以上]
のパターンにマッチし、$1 のグループには
[0から9までの数値が2文字以上]
の文字列が設定されます。
置換の結果は次の通りになります。
04
12
08
00
02
例1B:単純な数値のみの場合で2桁にそろえる場合
次の文字列があります。0を埋めて2桁にそろえたいです。
4
12
8
0
2
置換処理
1桁の数値の場合に0を追加します。
置換パターン | 置換文字列 | メモ |
^([0-9]{1})$ | 0$ 1 |
^(\d{1})$ | 0$1 | こちらの記述でも可 |
置換の結果は次の通りになります。
04
12
08
00
02
例2A:手前にラベルがある場合 (0を追加してから削除する方法)
"ID="は残しつつ0を埋めて3桁にそろえたいです。
ID=4
ID=8
ID=10
ID=12
ID=160
置換処理
最初の置換ではすべての項目に0を2つ追加します。
置換パターン | 置換文字列 | メモ |
(ID=)([0-9]+) | ${1}00$2 |
(ID=)(\d+) | ${1}00$2 | こちらの記述でも可 |
グループ名とパターンが混同するため、$の後ろのインデックス番号を中かっこ"{" "}" で囲んでいます。
置換の結果は次の通りになります。
ID=004
ID=008
ID=0010
ID=0012
ID=00160
この結果を使いもう一度置換します。
置換パターン | 置換文字列 | メモ |
(ID=)0*([0-9]{3,}) | $1$2 |
(ID=)0*(\d{3,}) | $1$2 | こちらの記述でも可 |
{3,} は手前の文字が2回以上のの繰り返しとなることを指定しています。今回の式の場合は、
[任意個数の0][0から9までの数値が2文字以上]
のパターンにマッチし、$1 のグループには
[0から9までの数値が2文字以上]
の文字列が設定されます。
置換の結果は次の通りになります。
ID=004
ID=008
ID=010
ID=012
ID=160
例2B:手前にラベルがある場合
"ID="は残しつつ0を埋めて3桁にそろえたいです。
ID=4
ID=8
ID=10
ID=12
ID=160
置換処理
最初の置換ではid=(1桁の数値)の項目に0を2つ追加します。
置換パターン | 置換文字列 | メモ |
(ID=)([0-9]{1})$ | ${1}00$2 |
(ID=)(\d{1})$ | ${1}00$2 | こちらの記述でも可 |
置換の結果は次の通りになります。
ID=004
ID=008
ID=10
ID=12
ID=160
この結果を使いもう一度置換します。
id=(2桁の数値)の項目に0を1つ追加します。
置換パターン | 置換文字列 | メモ |
(ID=)([0-9]{2})$ | ${1}0$2 |
(ID=)(\d{2})$ | ${1}0$2 | こちらの記述でも可 |
置換の結果は次の通りになります。
ID=004
ID=008
ID=010
ID=012
ID=160
例3A:かっこを外して桁そろえする場合 (0を追加してから削除する方法)
かっこを外して3桁にそろえたいです。
(1)
(5)
(16)
(22)
(102)
置換処理
最初の置換ではすべての項目に0を2つ追加します。
置換パターン | 置換文字列 | メモ |
\(([0-9]+)\) | 00$1 |
\(((\d+)\) | 00$1 | こちらの記述でも可 |
置換の結果は次の通りになります。
001
005
0016
0022
00102
この結果を使いもう一度置換します。
置換パターン | 置換文字列 | メモ |
0*([0-9]{3,}) | $1 |
0*(\d{3,}) | $1 | こちらの記述でも可 |
置換の結果は次の通りになります。
001
005
016
022
102
例3B:かっこを外して桁そろえする場合
かっこを外して3桁にそろえたいです。
(1)
(5)
(16)
(22)
(102)
置換処理
最初の置換では([数値1桁])の項目から括弧を外し、0を2つ追加します。
置換パターン | 置換文字列 | メモ |
\(([0-9]{1})\) | 00$1 1 |
\((\d{1})\) | 00$1 | こちらの記述でも可 |
置換の結果は次の通りになります。
001
005
(16)
(22)
(102)
この結果を使い、もう一度置換します。([数値2桁])の項目から括弧を外し、0を1つ追加します。
置換パターン | 置換文字列 | メモ |
\(([0-9]{2})\) | 0$1 |
\((\d{2})\) | 0$1 | こちらの記述でも可 |
置換の結果は次の通りになります。
001
005
016
022
(102)
更にもう一度置換します。([数値3桁])の項目から括弧を外します。
置換パターン | 置換文字列 | メモ |
\(([0-9]{3})\) | $1 |
\((\d{3})\) | $1 | こちらの記述でも可 |
置換の結果は次の通りになります。
001
005
016
022
102
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。