gpt4 book ai didi

google-apps-script - 无法使用 Google Apps 脚本搜索名称中带下划线的文件

转载 作者:行者123 更新时间:2023-12-04 02:47:41 25 4
gpt4 key购买 nike

我正在使用 Google Apps 脚本在我的云端硬盘帐户中按名称查找文件。我在查找名称包含下划线的文件时遇到问题。

例如,我有一个名为FB_51.pdf的文件

此代码不检索文件

folder.searchFiles('title contains "51"');

此代码不检索文件

folder.searchFiles('title contains "_51"');

但是这段代码检索文件

folder.searchFiles('title contains "FB_51"');

我想检索只有两位数字“51”的文件。

最佳答案

不幸的是,我相信您所认为的故障实际上是​​从 Google 的角度来看是“设计使然”的。 Apps Script doc on searching 都不是,也不是 page that doc links to提到这个,但我在 API docs page for search syntax 找到了答案, 在脚注下:

The contains operator only performs prefix matching for a name. For example, the name "HelloWorld" would match for name contains 'Hello' but not name contains 'World'.

这对我来说似乎很确定,但为了确定,我用你的例子进行了测试:

Log

在这种情况下,Google 将下划线视为普通字符,而不是定界符或单词边界,因此“FB_51”被视为一个单词,而不是“FB”和“51”,因此它只能匹配精确的单词匹配或前缀匹配(根据我在上面提出的警告)。

备选

除了强制您的文件采用适合搜索语法的格式(例如交换为 51_FB.pdf),或者始终在您的搜索词前加上 FB_ 前缀,如果文件始终匹配该语法,您的选择非常有限。您最好的选择可能是将搜索的起点限制在尽可能窄的位置,例如特定的 Drive 文件夹,然后获取所有文件,遍历它们,并使用 Regex 来匹配文件名。示例脚本:

function findNumberedPdf(folderId, number) {
var folder = DriveApp.getFolderById(folderId);
var files = folder.searchFiles("mimeType contains 'pdf'");
while (files.hasNext()) {
var file = files.next();
var regPattern = new RegExp(number);
if (regPattern.test(file.getName())) {
return file;
}
}
return false;
}
/**
* Test:
* Logger.log(findNumberedPdf('0CdI2-...', 51).getName());
* >> "FB_51.pdf"
*/

当然,如果您的文件确实总是以 FB_ 开头,您也可以只创建一个包装函数以始终将该字符串添加到您的搜索中。


注意 - 为什么这是设计使然:

这是“设计使然”并且 Google 似乎关心单词边界和标记化的原因是字符串匹配的工作原理。通常,当我们搜索某些内容时,我们希望搜索查询中的每个标记都有一个完整的词(或相似词)匹配。如果搜索无法以这种方式进行,则搜索“51”可能会提取“fileA-v5251989.jpg”之类的文件,或者搜索“cat”会匹配“乘法”和“修改”。

关于google-apps-script - 无法使用 Google Apps 脚本搜索名称中带下划线的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56693341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com