如何将特定字段从 GMAIL 正文解析为 google SHEETS

How to parse specific field from GMAIL body to google SHEETS

我有一个以此开头的 gmail 正文:

Name: Full Report
Store: River North (Wells St)
Date Tripped: 18 Feb 2020 8:40 PM
Business Date: 18 Feb 2020 (Closed)
Message:
Information:
This alert was tripped based on a user defined trigger: Every 5 minutes.

我正在尝试解析 Date Tripped: 字段和 Business Date: 字段,但不相信我的正则表达式是正确的。

    // Implement Parsing rules using regular expressions
    if (content) {

      tmp = content.match(/Date Tripped: \s*([A-Za-z0-9.\s ]+)(\r?\n)/);
      var tripped = (tmp && tmp[1]) ? tmp[1].trim() : 'N/A';

      tmp = content.match(/Business Date: \[0-9][()]/);
      var businessdate = (tmp && tmp[1]) ? tmp[1].trim() : 'N/A';

对于 Date Tripped,需要进行细微更改:

Date Tripped:\s*([:A-Za-z0-9\s]+)\r?\n

您的主要错误:您忘记将 : 放在 class 括号内。 提示:去掉 () 周围的 \r?\n。你不想抓住那些。

您可以将其缩短一点:

Date Tripped:\s*([:\w\s]+)\r?\n

regex101

对于营业日期,这一个可以:

Business Date:\s([\w\s]+\([a-zA-Z]+\))

或更短:

Business Date:\s([\w\s]+\(\w+\))

您的(主要)错误:您转义了 \[,此处不正确。接下来:[()] 匹配 (),但不匹配 (Closed)。 参见 regex101

您还可以使模式更具体一些,并使用一个模式来匹配两个选项。

\b(?:Business Date|Date Tripped):\s*(?:3[01]|[12][0-9]|0?[1-9])\s+[A-Za-z]+\s+\d{4}\s+(?:\([^()]+\)|(?:1[0-2]|0?[1-9]):[0-5]?[0-9]\s*[AP]M)

说明

  • \b(?:Business Date|Date Tripped):\s* 匹配其中一个选项
  • (?:非捕获组
    • 3[01]|[12][0-9]|0?[1-9]匹配数字1-31
  • ) 关闭群组
  • \s+[A-Za-z]+\s+\d{4}\s+ 匹配 1+ 个字符 A-Za-z 后跟 4 个数字
  • (?:非捕获组
    • \([^()]+\) 从左括号匹配到右括号
    • |
    • (?:1[0-2]|0?[1-9]):[0-5]?[0-9]\s*[AP]M匹配时间模式
  • ) 关闭群组

Regex demo

请注意,该模式不会验证日期本身。