Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
谷歌表格查询“;匹配“;(regex)不处理文本单元格,但;包括「;行得通_Regex_Google Apps Script_Google Sheets_Google Sheets Query - Fatal编程技术网

谷歌表格查询“;匹配“;(regex)不处理文本单元格,但;包括「;行得通

谷歌表格查询“;匹配“;(regex)不处理文本单元格,但;包括「;行得通,regex,google-apps-script,google-sheets,google-sheets-query,Regex,Google Apps Script,Google Sheets,Google Sheets Query,我在一列中有电子邮件正文文本(在我的脚本中使用Google apps脚本getPlainBody()填充),我正在尝试查询它是否匹配。因为我将有几个OR语句使用contains,所以我宁愿使用match。但是,match对电子邮件正文文本不起作用,但是如果我从公式框复制文本,然后将其粘贴到另一个单元格中,match对粘贴的单元格起作用。Match也适用于填充的电子邮件主题,因此它似乎只是getPlainBody()文本的一个问题。 应用程序脚本代码(获取标记为test/test2的两封电子邮件的

我在一列中有电子邮件正文文本(在我的脚本中使用Google apps脚本getPlainBody()填充),我正在尝试查询它是否匹配。因为我将有几个OR语句使用contains,所以我宁愿使用match。但是,match对电子邮件正文文本不起作用,但是如果我从公式框复制文本,然后将其粘贴到另一个单元格中,match对粘贴的单元格起作用。Match也适用于填充的电子邮件主题,因此它似乎只是getPlainBody()文本的一个问题。 应用程序脚本代码(获取标记为test/test2的两封电子邮件的主题和正文),然后查询基本如下:

function emailTest() {
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheetByName('test sheet').activate();
  var destArray=new Array();
  //My gmail has two emails labeled test/test2
  var labelObject=GmailApp.getUserLabelByName('test/test2');
  var threads = labelObject.getThreads(0, 30);
  for (var n in threads) {
    var msg = threads[n].getMessages();
    
    var destArrayRow = new Array();
    destArrayRow.push(msg[0].getSubject());
    var entireThread=msg[msg.length-1].getPlainBody();
    destArrayRow.push(entireThread);
    destArray.push(destArrayRow);
  }

  range = sh.getRange(1, 1, 2,2).setValues(destArray);
}
示例文本和查询:

example also with
attachments

---------- Forwarded message ---------

example also with attachments ---------- Forwarded message ---------


如果您能通过Google Sheets方法更改文本(我已经尝试过FORMULATEXT和TO_text),或者在应用程序脚本中更改文本(可能以后必须以某种方式格式化范围?)。

文本包含新行(
\n
)。要将其纳入正则表达式,您需要添加:
s
,这使得
包含
\n

=QUERY(A1:A2,"SELECT * WHERE lower(A) MATCHES '(?s).*examp.*|.*forw.*'")
如果不起作用,请先使用REGEXREPLACE删除
\n

=ARRAYFORMULA(QUERY(REGEXREPLACE(A1:A2,"\n",),"SELECT * WHERE lower(Col1) MATCHES '.*examp.*|.*forw.*'"))

现在添加代码和公式!如果将单元格中的示例文本添加到问题中,则很容易复制。共享电子表格也会暴露您的电子邮件。无论如何,从表面上看,您的文本可能包含新行(
\n
)。要将其纳入正则表达式,您需要添加:
s
<代码>=查询(A1:A2,“选择下(A)与“(?s)”匹配的*位置。*examp.*forw.*”)。如果行得通,请告诉我,我会添加一个答案。我的文本确实包含新行,但标志不起作用。我粘贴了示例文本,但可能不仅仅是文本,还有更多的内容,因此工作表链接也是我的替代解决方案的工作方式吗?您的示例文本位于代码块中,很难以这种方式理解;而且样本表的链接也丢失了。你能更新这个问题吗?标志对我不起作用,在我的情况下,为了可读性,最好不要在手之前删除。我最终使用了一个带有regexmatch的过滤器,而不是一个有其自身局限性的查询too@dims有趣的事实:查询“匹配”有点像本地的/在客户端完成的。移动应用程序将支持标志。检索结果后,它们将上载到服务器,并且可以在桌面上检索,而无需重新运行该功能。@dims如果找到解决方案,请发布。否,我发布的关于查询匹配的问题没有解决方案(我最终没有在我的项目中使用查询)
=ARRAYFORMULA(QUERY(REGEXREPLACE(A1:A2,"\n",),"SELECT * WHERE lower(Col1) MATCHES '.*examp.*|.*forw.*'"))