みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Googleフォームからの送信であれば、その入力内容をスプレッドシートに蓄積することは、とっても簡単にできます。
ですが、お問い合わせフォームなどはフォーム作成サービスなどを使っていて、フォームの送信内容がメールで届くということも少なくありません。
そこからデータを拾うために、メールの本文から一つ一つコピペするという地味な作業を強いられます。
- 氏名
- 社名
- 住所
- 電話番号
- など…
しかし、そんな作業もGoogle Apps Scriptを使えばおさらばです。
ということで、何回かの記事にわたって、Google App Scriptを使ってGmailで届いたフォームからの送信情報をスプレッドシートに蓄積する方法をお伝えします。
それで、本文から必要なデータを抽出するのに、「正規表現」というテクニックを使います。
ということで、今回は正規表現とは何か、またGoogle Apps Scriptで正規表現を使って必要な情報を抽出する最も簡単なスクリプトです。
では、いってみましょう!
正規表現とは何か
正規表現…なんか、プログラミングっぽくない名称ですが、簡単にいうと文字列のパターンを表現するための手法のことです。
例えば、Excelではアスタリスク(*)を使って「東京都*」とすれば、「東京都ではじまる任意の文字列」という「パターン」を表すことになります。
正規表現はもっと色々な文字(メタ文字といいます)を使って様々なパターンを表現することができる表現方法です。
そして、Google Apps Scriptをはじめ、多くのプログラミング言語では、この正規表現を使って文字列の検索や置換などをすることができるというわけです。
ちなみに、英語では「Regular Expression」といいます。
とっても簡単な正規表現による抽出の例
では、簡単な例を一つ。
まず、以下のような文字列を用意します。
const str = '名前:鈴木r年齢:30才';
rは「復帰」を表す文字コードですので、文字列strは以下のような文字列を表します。
名前:鈴木 年齢:30才
それに対して、以下のようなGASスクリプトを作成して実行します。
function myFunction() { const str = '名前:鈴木r年齢:30才'; console.log(str.match(/名前:.*?r/g)); console.log(str.match(/年齢:.*?才/g)); }
すると結果として以下のようなログ出力が得られます。
ちょっとわかりづらいですが、以下を配列で出力するスクリプトです。
- 「名前:」ではじまって「r」(復帰)で終わる文字列のパターン
- 「年齢:」ではじまって「才」で終わる文字列のパターン
GASで正規表現により文字列を抽出する方法
前述のスクリプトは、冒頭でお伝えした正規表現を使った文字列の抽出の簡単な例となります。
一つ一つ解説をしていきますね。
正規表現の表現
正規表現はスラッシュ(/)で囲むことで表現をします。
つまり、スラッシュで囲んだ内容は「これは正規表現なんだな」とGASが認識をしてくれるというわけです。(シングルまたはダブルクォーテーションで文字列と認識されるのと同じです。)
なお、フラグには「g」や「i」などのアルファベットを使って、検索時のオプションを設定するものです。
フラグ | 説明 |
---|---|
g | マッチした全てを返す |
i | 大文字・小文字を区別しない |
m | 複数行を検索する |
今回は、フラグ「g」を付与しているので、マッチしたすべてを返します。
また、正規表現は変数に格納することもできます。
任意の0文字以上の文字列を表す正規表現
正規表現では、アルファベットや日本語、数字などの通常の文字列と、特殊な役割を持つメタ文字で組み合わせてパターンを表現します。
例えば「/名前:.*r/」という正規表現では
- 「名前:」:通常文字
- 「.」:任意の1文字を表すメタ文字
- 「*?」:直前の文字の0文字以上のうち最短のものを表すメタ文字
- 「r」:復帰
という構成になっています。
二つのメタ文字の組み合わせ「.*?」は任意の0文字以上の文字列のうち最短のものを表すことになりますから、正規表現全体としては「名前:」ではじまって改行で終わる文字列のパターンとなるわけです。
「.*?」は組み合わせてよく使うので覚えておくと良いかもです。
正規表現で使えるメタ文字やその組み合わせはほかにもたくさんありますが、必要に応じて調べていただければOKです。
matchメソッドで文字列から正規表現パターンを抽出
文字列の中から指定した正規表現のパターンの文字列を抽出するには、matchメソッドを使います。
matchメソッドでは正規表現にマッチした文字列を配列で返すので、実際に使う場合は配列から取り出してくださいね。
(正規表現がgフラグを含まない場合は、matchメソッドの挙動は異なります。詳しくはこちらを御覧ください。)
よりメール本文らしい文字列からの抽出
例えば、文字列strがもうちょっとメール本文っぽい文字列だったとします。
const str = '高橋様rお世話になっております。rr名前:鈴木r年齢:30才rr以上です。';
この文字列は実際には
高橋様
お世話になっております。
名前:鈴木
年齢:30才
以上です。
という文字列を表します。ちょっとメール本文っぽいですよね。
この場合も、前述と同じ正規表現で抽出することで、全く同じ結果を得ることができます。
以下のスクリプトを実行して確認してみてください。
function myFunction() { const str = '高橋様rお世話になっております。rr名前:鈴木r年齢:30才rr以上です。'; console.log(str.match(/名前:.*?r/g)); console.log(str.match(/年齢:.*?才/g)); }
まとめ
以上、Google Apps Scriptで正規表現を使った最も簡単なスクリプトについて紹介しました。
- 正規表現とは何か
- メタ文字「.*?」の使い方
- matchメソッドによる正規表現パターンにマッチした文字列の抽出
正規表現はメール本文からの抽出にも使えますし、WebスクレイピングしたHTMLドキュメントからの抽出にも有効です。
もっと色々なパターンの抽出ができますので、ぜひトライしてみてください。
次回は、抽出した文字列から余計な部分をトリミングしたいと思います。
どうぞお楽しみに!
連載目次:GASで正規表現を使ってデータを抽出&登録
正規表現を使うとGoogle Apps ScriptでメールやHTMLドキュメントからデータを抽出することができます。本シリーズでは、フォーム送信の通知メールからデータを抽出してスプレッドシートに追加するツールの作成を目指します。- Google Apps Scriptで正規表現を使って必要な情報を抽出する最も簡単なスクリプト
- Google Apps Scriptで正規表現でマッチした文字列から不要な部分を削除する
- Google Apps ScriptでGmailの受信メールから正規表現でデータを抽出する
- Google Apps Scriptでメールから正規表現で抽出したデータをスプレッドシートに蓄積する方法
- Google Apps ScriptでGmailのメッセージIDを取得する方法
- Google Apps Scriptでスプレッドシートの列データを配列として取得する方法
- GASで二次元配列に特定の要素が含まれているかを判定する方法
- GASでフォーム送信メールからデータを取得してスプレッドシートに蓄積するツールの完全版