如何用Google Sheets公式或脚本匹配多语言网页文本?
解决Google Sheets多语言网页内容匹配计数问题
一、改进版公式方案
针对原公式无法覆盖多语言变音符号(如德语Ä/Ö/Ü、葡萄牙语ã/õ)的问题,改用Sheets内置归一化函数处理文本,规避XPath 1.0的局限性:
=COUNTA(IFERROR(FILTER( SPLIT(TEXTJOIN(" ", TRUE, IMPORTXML(A2, "//text()")), " "), LOWER(NORMALIZE(REGEXREPLACE(SPLIT(TEXTJOIN(" ", TRUE, IMPORTXML(A2, "//text()")), " "), "[^\w\s]", ""))) = LOWER(NORMALIZE(REGEXREPLACE(B2, "[^\w\s]", ""))) )))
公式说明:
IMPORTXML(A2, "//text()"):提取网页所有纯文本节点TEXTJOIN + SPLIT:将分散文本合并后按空格拆分为单个词汇NORMALIZE:将带变音符号的字符转换为基础字符(如Ä→A、ã→a)REGEXREPLACE:移除非单词/非空格的干扰字符LOWER:统一转为小写,实现大小写不敏感匹配FILTER + COUNTA:统计匹配的词汇数量
二、Google Apps Script 脚本方案(更稳定通用)
若公式遇到字符长度限制或复杂语言场景,自定义脚本支持所有Unicode语言的归一化处理,可靠性更高:
步骤1:添加脚本
- 打开Google Sheets,点击「扩展程序」→「Apps 脚本」
- 删除默认代码,粘贴以下脚本:
function COUNT_MENTIONS(url, searchText) { if (!url || !searchText) return 0; // 发起网页请求 let response; try { response = UrlFetchApp.fetch(url, {muteHttpExceptions: true}); } catch(e) { return "无法访问网页"; } if (response.getResponseCode() !== 200) return "网页请求失败"; // 提取纯文本 const html = response.getContentText(); const plainText = html.replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim(); // 文本归一化:移除变音符号、转小写 const normalizeText = (text) => { return text.normalize("NFD") .replace(/[\u0300-\u036f]/g, "") .toLowerCase() .trim(); }; const normalizedSearch = normalizeText(searchText); const normalizedContent = normalizeText(plainText); // 按单词边界匹配,避免部分匹配 const matchRegex = new RegExp(`\\b${normalizedSearch}\\b`, "g"); const matches = normalizedContent.match(matchRegex); return matches ? matches.length : 0; }
- 保存脚本(命名为
MentionCounter即可),完成授权
步骤2:使用自定义函数
在单元格中输入:
=COUNT_MENTIONS(A2, B2)
A2:存放目标网页URL的单元格B2:存放要查找的多语言文本的单元格
脚本优势:
- 支持所有Unicode语言(拉丁、西里尔、德语、葡萄牙语等)的变音符号处理
- 按单词边界匹配,避免误统计(如不会把"cat"计入"category"的匹配)
- 处理大篇幅网页内容更稳定,无公式字符长度限制
内容的提问来源于stack exchange,提问作者Monte Cristo
相关产品推荐
相关产品推荐

