正規表現ユースケース(^[]) : Notion Tips (155)

はじめに

Notion Tips の第155回目は、昨日の続きで正規表現ユースケースを解説します。今回は ^[] です。先頭の文字がある範囲に入っているかを確認します。

ユースケース: 言語を分類

テンプレートを作成しているときに、その日付メンションがどの国の言語で表現されているかを確認する必要が出てきました。言語によって、日付の表現方法が異なるためです。調べたところ、Notion でサポートされている言語は以下の 3 つに分類できることがわかりました。

  1. YYYY MM DD 型
    1. 日本語、韓国語、繁体中国語、簡体中国語
  2. MM DD YYYY 型
    1. English (MM の部分は月を示す単語)
  3. DD MM YYYY 型
    1. その他の言語 (MM の部分は月を示す単語)

これらを分類するためには、文の一番最初をチェックすればいいことになります。

test("^\d{4}")

test 関数は文字列が正規表現にマッチしたときに true を返す関数です。これを使って判定を行います。ここで \d は機能説明した数字一文字にマッチします。昨日は + で1文字以上の繰り返しを使いましたが、今回は {4} できっちり 4 回の繰り返しを指定しています。ただし、これだけでは文字列のどこかに 4 桁の数字があればマッチしてしまうので、1 から 3 のどれでも true になってしまいます。そこで、一番先頭に書いた ^ が意味を持ちます。この記号は文の先頭を意味するため、この表現により 1 の日本語などの場合だけにマッチすることになります。

test("^[A-Z][a-z]+")

次に 2 と 3 を比較します。上のテストで 4桁の数値を除外できているのであれば、2桁の数値を検出すればよいのですが、それではネタにならないので、2 を検出してみましょう。2 の場合は先頭に January から December の月名が入っているはずです。どの文字が入っているかはその日付によって異なるので、ここでは1文字目が大文字、2文字目以降が小文字の繰り返しであることを確認します。

ここで [] は中に書いたいずれかの文字にマッチします。例えば [ATGC] と記述するとA, T, G, C のいずれかの文字にマッチします。ただし、アルファベット全ての文字を書くのは莫迦らしいので、 - を使って範囲指定することができます。最初の [A-Z] で一文字目の大文字にマッチ、 [a-z]+ で二文字目以降の小文字の連続にマッチします。

応用例

ここで、上で示した分類をする数式を書いてみます。先頭が 4 桁の西暦であれば CJK、先頭が月の英単語であれば English、それ以外であれば other と表示されます。

ifs(
    prop("date string").test("^\d{4}"), "CJK",
    prop("date string").test("^[A-Z][a-z]+"), "English",
    "other"
)

作成した数式

おわりに

今回は正規表現ユースケースの第二弾として、文字列の先頭の文字を範囲で確認する ^[] で確認しました。今後も正規表現の応用例を見つけながら解説していきたいと思います。

hkob.notion.site