スキルアップを始める!

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

GAS(GoogleAppsScript)
GAS(GoogleAppsScript)
この記事は約5分で読めます。

※記事中に広告情報を含みます。

\ワードプレスのスキルアップはこちら!/ WordPress入門読本

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

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^)/

URLをコピーしました!