見出し画像

そもそも正規表現とは何ですか?(Excel新関数の前に・・・)


はじめに

こんにちは。ケイ・エム・ディ・エス 業務プロセス改善推進グループ(KMDS BPMG)です。

私の環境では、Excelに以下の新関数が加わっていました。(Microsoft365版:バージョン2501)
目玉の一つは、REGEX系の関数です。REGEXは、Regular Expressionの略で、日本語では正規表現と呼ばれています。

(公式ブログ)
https://techcommunity.microsoft.com/blog/microsoft365insiderblog/new-regular-expression-regex-functions-in-excel/4226334

  1. REGEXEXTRACT (正規表現による抽出)

  2. REGEXREPLACE(正規表現による置換)

  3. REGEXTEST(正規表現によるチェック)

  4. XLOOKUPXMATCHの引数 一致モードで3を指定すると、正規表現による一致が使える

  1. REGEXEXTRACTの使用例👇:A1セルの文章からコンテナ番号を抽出する

=TOCOL(REGEXEXTRACT(A1,"[A-Z]{4}\d{7}",1,0))
REGEXEXTRACTの使用例
REGEXEXTRACTの使用例

4. XLOOKUPの第5引数👇: 一致モードで3を選択すると、正規表現一致に。

XLOOKUP MATCH Mode
XLOOKUPの一致モード3

ついに正規表現がExcelで普通に使えるようになった訳です。これはかなり強力です。


※ 他にも、TRIMRANGE(空白セル範囲の切り詰め)・TRANSLATE(翻訳)・DETECTLANGUAGE(言語の検出) も追加されていました。が、これはまた別の機会にします。


正規表現って何?

ところで、「そもそも正規表現って何?」と疑問に思う方もおられるでしょう。私も少し前までそうでした。とても便利なので、知らないのはもったいないです。せっかくの機会ですから、正規表現とは何かを覚えましょう。生成AIに聞いてみます。

(以下は、ChatGPTによる回答です)


正規表現は、テキストの中から「決まった形(パターン)」に沿った部分だけを見つけ出すためのルールです。たとえば、コンテナ番号や車体番号など、決まったフォーマットがある番号を例に考えてみましょう。

コンテナ番号の例

国際規格では、コンテナ番号は4文字の英字7桁の数字で構成されています。
このパターンを正規表現で表すと、次のようになります。

^[A-Z]{4}\d{7}$
  • ^ と $ は文字列の先頭と末尾を意味し、全体がこのパターンに沿っていることを示します。

  • [A-Z]{4} は大文字の英字が4文字連続することを意味します。

  • \d{7} は数字が7桁続くことを意味します。

マッチする例:

  • ABCD1234567 → 4文字の英字と7桁の数字なのでマッチします

マッチしない例:

  • ABC1234567 → 英字が3文字しかないのでマッチしません

  • ABCDE1234567 → 英字が5文字なのでマッチしません

  • ABCD123456 → 数字が6桁しかないのでマッチしません

  • abcd1234567 → 英字が小文字の場合、この正規表現ではマッチしません(大文字限定のため)。

車体番号(例:VIN)の場合

車体番号(VIN: Vehicle Identification Number)は、一般に17文字で構成され、特定の文字(I, O, Qなど)が使われないなどのルールがあります。シンプルな例として、以下のような正規表現を考えることができます。

^(?!.*[IOQ])[A-HJ-NPR-Z0-9]{17}$
  • ^(?!.*[IOQ]) は、文字列のどこにも I, O, Q が含まれないことを保証します。

  • [A-HJ-NPR-Z0-9]{17} は、許可される大文字アルファベット(I, O, Qを除く)と数字を17文字使っていることを意味します。

  • ^ と $ は文字列の先頭と末尾にマッチするため、全体がこのパターンに沿っている必要があります。

マッチする例:

  • 1HGCM82633A004352 → 17文字で、I, O, Qを含まなければマッチします

マッチしない例:

  • 1HGCM82633A00435I → Iが含まれているためマッチしません

  • 1HGCM82633A00435 → 文字数が16文字なのでマッチしません

まとめ

正規表現は「決まったパターンのルールブック」のようなもので、たとえば以下のようなルールを使って

  • コンテナ番号:^[A-Z]{4}\d{7}$

  • 車体番号(VINの簡易チェック):^(?!.*[IOQ])[A-HJ-NPR-Z0-9]{17}$

といった形で、入力された文字列が正しいフォーマットかどうかを瞬時に判定したり、必要な部分だけを抽出したりできます。これにより、データのチェックや抽出作業を効率よく行えるようになります。


(以上、ChatGPTによる説明終わり)

終わりに

説明はいかがでしたか。ご覧の通り、正規表現という決められた文法で欲しいパターンさえ書いてしまえば、要素抽出や置換がスパッと出来ます。一致させるパターンも、文字数や部分一致・否定などなど、かなり柔軟に設定できます。

正規表現はExcel以外でも様々なツールで使えます。例えばRPAのPower Automate for desktopでも利用可能です。
ただこれまでは、理屈がわかっていても、自分で書くのが難しいので、なかなか使いこなせませんでした。

しかし、現在では生成AIがあります。生成AIの回答をExcelの式にコピペすれば、完成です。これによって、ものすごくハードルが下がりました。

Microsoft365 Copilot Chat
Microsoft 365 Copilot Chatに聞いてみました

コンテナ番号やメールアドレス、電話番号などパターンが決まっているものを、フィルターや検索でうまく拾えないので、目視でチェック!、、、なんてやってませんか?

もしそうなら、正規表現にトライしてみましょう。時間短縮になります。しかも、あなた自身が事細かに分からなくても、生成AIに頼ればどうにかしてくれます。

「正規表現」と聞いて、最初は難しい印象を持ったかもしれません。しかしその中身は、大変有用なパターンマッチングのことで、今やとても気軽に使えるようになっているのです。

最後まで読んでいただき、ありがとうございました。
記事が気に入ったら、スキ・フォローお願いします!

KMDS BPMG