エグウェブ.JP@オンライン/WEB講座・セミナー・WEB分析

WEB分析・ホームページ・WEBサイト作成・WordPress、Googleアナリティクス、LINEスタンプ、Photshop・illustrator、Excelの講座やオンラインセミナーを開催中!

【GoogleAppsScript(GAS)】Gmail(Gメール)メール本文から特定の文字を抽出して一部のみを抜き出してスプレッドシートに書き込む方法〜PART2|正規表現

time 2020/09/09

前回まではメールの本文から特定の文字列を抽出する方法、そして「正規表現」の使い方でした。今回は実際に抽出を実行してみたいと思います。

new RegExp

まずは前回と同じですが、GASで正規表現を扱うときには「RegExp」を使います。

const regtxt = new RegExp('作家名:  + '.*?' + '\r' );

これで、変数regtxtに正規表現の状態で格納されることになります。

現在までのコードはこちら

function searchContactMail() {
  const search_text = '"銀河鉄道の夜"';  
  const threads = GmailApp.search(search_text, 0, 1);
  const messagesThreads = GmailApp.getMessagesForThreads(threads);
  //メッセージ全文
  const messe_body = messagesThreads[0][0].getPlainBody();
  SpreadsheetApp.getActiveSheet().getRange(2, 1).setValue(messe_body);
//抽出を開始
  const regtxt = new RegExp('作家名:'  + '.*?' + '\r' );
//B2セルに書き込む
//  SpreadsheetApp.getActiveSheet().getRange(2, 2).setValue();
}

正規表現

まずは、以前にも書いた「正規表現」を使って不要な部分を削除していきます。

const regtxt = new RegExp('作家名:'  + '.*?');
const txtreplace = messe_body.match(regtxt)[0].replace('作家名: ', '');

こうすると、「作家名:」の部分のみが抽出(一致)した(.*?=最左最短マッチ)ということになります。

:の右側だけを抽出する

ここに「\r リターン(制御コード 0x0d)」を付け加えてみます。

  const regtxt = new RegExp('作家名:'  + '.*?' + '\r' );
  const txtreplace = messe_body.match(regtxt)[0].replace('作家名: ', '');

こうすると、regtxtでマッチするパターンが見つかったら抽出できるので、今回の場合ですと、

作家名: 宮沢 賢治

の文字が「txtreplace」に入り、そして「.replace(‘作家名: ‘, ”)」によって作家名:が削除された結果、

宮沢 賢治

という文字だけが残る、ということになりました。

抽出処理、実行。

あとは、各列用の変数を準備して、順番に格納していけば、本文内の特定の文字だけを各セルに入れていくことができる、ということになります。

  const search_text = '"銀河鉄道の夜"';  
  const threads = GmailApp.search(search_text, 0, 1);
  const messagesThreads = GmailApp.getMessagesForThreads(threads);
  //メッセージ全文
  const messe_body = messagesThreads[0][0].getPlainBody();
  SpreadsheetApp.getActiveSheet().getRange(2, 1).setValue(messe_body);
  const regtxt1 = new RegExp('作家名:'  + '.*?' + '\r' );
  const txt1 = messe_body.match(regtxt1)[0].replace('作家名: ', '');
  const regtxt2 = new RegExp('作家名読み:'  + '.*?' + '\r' );
  const txt2 = messe_body.match(regtxt2)[0].replace('作家名読み: ', '');
  const regtxt3 = new RegExp('生年:'  + '.*?' + '\r' );
  const txt3 = messe_body.match(regtxt3)[0].replace('生年: ', '');
  //抽出した変数
  SpreadsheetApp.getActiveSheet().getRange(2, 2).setValue(txt1);
  SpreadsheetApp.getActiveSheet().getRange(2, 3).setValue(txt2);
  SpreadsheetApp.getActiveSheet().getRange(2, 4).setValue(txt3);

結果

↓実行

抽出結果↓

抽出できました!!

あとは、ループなりで回していけば、特定条件でのメール本文を一気に集めることもできるような気がします。

正規表現の部分が怪しいので・・・「もっとこんな方法使ったらいいですよ」などあれば、教えて頂けると嬉しいです!

ご参考下さい^o^)/

download(ダウンロード)

プロフィール

EGUWEB

EGUWEB

【皆さまの人生に最良のファーストステップを】WEBサイトを作りたい!WEB分析を学びたいけど分からない。とりあえず色々と知りたい!皆様の悩みを解決できるように頑張ります。 [詳細]

カテゴリー