如何在Google Sheets中无需GAS自定义函数,用单个公式移除指定字符串中各字符的首次出现
单个公式实现字符移除方案
当然有可行的方案!咱们完全可以用Google Sheets自带的函数组合搞定这个需求,不需要依赖自定义函数,一个公式就能解决。
实现公式
假设原字符串放在单元格A1,要移除的字符集合字符串放在B1(比如B1内容是WOLFMAN),可以用下面这个公式:
=REDUCE(A1,SPLIT(B1,""),LAMBDA(acc,char,REGEXREPLACE(acc,"^([^"&char&"]*)"&char,"$1")))
如果直接写死原字符串和要移除的字符串,就是:
=REDUCE("SOFTMAAWCKOVENRFLLOW",SPLIT("WOLFMAN",""),LAMBDA(acc,char,REGEXREPLACE(acc,"^([^"&char&"]*)"&char,"$1")))
公式原理拆解
咱们一步步来理解这个公式的工作逻辑:
SPLIT(B1,""):把要移除的字符串(比如WOLFMAN)拆分成单个字符的数组,也就是["W","O","L","F","M","A","N"],这样就能逐个处理每个需要移除的字符。REDUCE(初始值, 处理数组, 迭代函数):这是核心的迭代工具,从初始的原字符串开始,依次用每个字符去更新结果:acc代表每次迭代后累积的字符串结果char代表当前要处理的单个字符
REGEXREPLACE(acc,"^([^"&char&"]*)"&char,"$1"):这一步负责移除当前字符的首次出现:- 正则表达式
^([^"&char&"]*)"&char的意思是:从字符串开头开始,先匹配任意多个不是当前字符的内容(把这部分放到捕获组$1里),然后匹配第一个出现的当前字符。 - 替换成
$1就相当于把第一个出现的当前字符删掉,保留前面的所有内容。
- 正则表达式
验证效果
用你的例子测试:
- 原字符串:
SOFTMAAWCKOVENRFLLOW - 要移除的字符:
WOLFMAN的每个字符首次出现 - 经过公式迭代处理后,最终会得到目标字符串:
STACKOVERFLOW
内容的提问来源于stack exchange,提问作者Matan Arie
相关产品推荐
相关产品推荐

