はじめに
BizRobo!を使った業務自動化では、様々なデータ形式の変換が必要になることがあります。その中でも時刻のフォーマット変換は頻繁に発生する処理の一つです。
例えば、「940」や「1140」といった3〜4桁の数値を「9:40」や「11:40」のような「時:分」形式に変換したいケースがあります。このような変換にはいくつかの方法がありますが、今回は特に正規表現を使った変換方法に焦点を当ててご紹介します。
問題の定義
以下のような時間データがあるとします:
- 940(9時40分)
- 1140(11時40分)
- 1305(13時05分)
これらを以下のような形式に変換したいと考えます:
- 9:40
- 11:40
- 13:05
つまり、「最後の2桁の前にコロンを入れる」という処理を行いたいわけです。
BizRobo!での実装方法
正規表現による解決法
今回のケースでは、「最後の2桁の前にコロン」を入れる必要があるため、次のような正規表現が有効です:
(?=\d{2}$)
この正規表現パターンは「末尾2桁の直前の位置」にマッチします。
パターンの構成要素:
- (?=...) : 先読み(lookahead)
- \d{2} : 2桁の数字
- $ : 文字列の末尾
エクスプレッションでの実装
エクスプレッションを使用する場合:
replacePattern(時間数値, "(?=\\d{2}$)", ":")
例えば、時間数値が940の場合、このエクスプレッションは「9:40」を返します。
各言語の正規表現との比較
BizRobo!の正規表現はJavaの正規表現と似た実装になっていますが、完全に同一というわけではありません。
正規表現の基本的な文法(メタ文字、量指定子、グループ化など)はほとんどの言語で共通していますが、違いもあります。
以下に主な言語での同等表現を示します:
Java
String formatted = timeStr.replaceAll("(?=(\\d{2}$))", ":");
Javaでは、正規表現中のバックスラッシュを二重にエスケープする必要があります。
JavaScript
const formatted = timeStr.replace(/(?=\d{2}$)/, ":");
JavaScript: Javaと同様に\を2つ使いますが、独自の拡張もあります。
(ES2018以降で同様の書き方をサポート)
Python
import re
formatted = re.sub(r'(?=\d{2}$)', ':', timeStr)
Perl/Python: エスケープに\を1つ使います
PHP
$formatted = preg_replace('/(?=\d{2}$)/', ':', $timeStr);
Ruby
formatted = timeStr.gsub(/(?=\d{2}$)/, ':')
注意点
- 正規表現は強力ですが、入力データのバリデーションも重要です。例えば、分が60以上の値(例:980 → 9:80)は時刻として不適切です。
- 3桁未満の入力(例:45)や5桁以上の入力(例:12345)に対する対応も考慮する必要があります。
まとめ
今回は、BizRobo!を使って3-4桁の時間数値を「時:分」形式に変換する方法を紹介しました。特に正規表現の先読み機能を使用することで、「最後の2桁の前にコロンを入れる」という要件を簡潔に実装できることを示しました。
正規表現は一見複雑に見えますが、一度理解すれば様々なテキスト処理を効率化できるツールです。ぜひ業務自動化の武器の一つとして活用してみてください。
参考リンク