「正規表現」を覚えて業務効率化!

こんにちは、ダンデライオンズ 第一ユニット所属のベーです。

以前に書いたエクセルのショートカットについての記事の評判が良かったので、今回はまた仕事でパソコンを使い始めたばかりの方向けに「正規表現 (regular expression)」について書こうと思います。

正規表現とは

検索すれば詳しいことはたくさん出てきますが、まずは複雑なパターンの検索・置換を行うための表現方法だと思ってください。

例えばこんな時に使えます

・文章の中の似たような箇所を一括で検索・修正する

・プログラム内で日付や、メールアドレスなどのフォーマットをチェックする

・大量のログから特定のエラーを検索する(例:エラーコードの下2桁が「99」)

などなど

実際に使ってみよう

文章だけの説明ではつまりどういうこと?
となると思いますので具体例を挙げてみます。

今後の予定
2/15/2021まで仕事。翌日2/16/2021から2/18/2021まで休みををとって旅行を計画しています。 ただ、2/19/2021は朝早くから仕事があるので最終日は少し早めに帰るつもりです。 ………

上の文書について、「月/日/年」という日付の並びは日本人にとって馴染みがないので、「年/月/日」に直せ!と上司から指示がありました。

でも日付は少しずつ違うから検索するのは大変、こんな文が大量にあったら、直すには時間がかかってしまう・・・

こんな時、正規表現を使って置換すれば一発で修正することができます!

正規表現を使った検索・置換は大抵のテキストエディタで利用できます。
(テキストエディタ以外のEXCELなどではマクロなどカスタマイズする必要があります)

今回は、テキストエディタとしてサクラエディタを使います。

ではやってみましょう!

(↓スマホで見ている人は拡大してみてください)

正規表現を使った日付置換サンプル(gif)



はい、できました!
これで正規表現の説明は終了です。ありがとうございました!



・・・というのは冗談で、↑のgifではサクッとやっちゃっていますが、一つずつ解説します。

解説

まず「置換前」に入力した内容(修正前テキストの検索)

([0-9]+)/([0-9]+)/([0-9]+)

これで日付を検索しています。
これは内容を分解すると下のようになります。

[0-9]0から9までどれかの数字1文字
+直前にある文字の1文字以上の繰り返し
()括弧で囲った部分に当たる文字は置換後にそのまま使用できる
/元の文章の日付の区切り文字
(今回は日付がスラッシュ区切りなのでスラッシュを入力)
「置換前」に使った文字ごとの意味(表)

そして「置換後」に入力した内容(修正後テキストの指定)

$3/$1/$2
$n「置換前」にて括弧で囲った箇所を置換前のまま使用する
(数字nは何番目の括弧かを指定している)
/日付の区切りに使いたい文字(何でもOK)
「置換後」に使った文字ごとの意味(表)

つまり、今回の指定を言葉に表すと、
「数字の連続(1) / 数字の連続(2) / 数字の連続(3) 」
というパターンを、
「数字の連続(2) / 数字の連続(1) / 数字の連続(2)」
という順番に直してねという指定をしたのです。

上の例では数字と記号だけ扱っていますが、もちろんアルファベットやひらがなを含んでいても同じようなことができます。

また「置換後」の指定を「$3年$1月$2日」とすればスラッシュ区切りではなく「2022年2月13日」という形式に変えることもできます。

これは本当に初歩的な例で、正規表現ではもっともっと色々なことができます。
調べれば、いろいろ解説されているので、もし興味を持ったら調べてみることをおすすめします。

「これ1回で検索したりできないかな・・・」と悩んだときは、正規表現という手段があることを思い出してみてください。

今回はここまでです。
長文お読みいただきありがとうございました。

※補足
今回の作業はサクラエディタで行いましたが、正規表現は使うツールによって書き方が変わったり、一部の書き方に対応していない場合があります。
実際に作業する際はお使いのツールでの書き方を調べてから使ってください。