使用LAMBDA递归函数从字符串中删除所有数字

3
我一直在关注Exceljet上的指南,学习如何创建递归LAMBDA函数以从字符串中删除所有数字。例如,A1B2C3D4E5变成了ABCDE。
唯一不同的是,我希望将包含字符省略的字符串存储在函数内部而不是单元格中。因此,我从开头的行中去掉了chars参数,并使用LET函数来存储字符串。
问题是我一直收到#VALUE!错误,但我无法弄清楚原因。
=LAMBDA(str,sub,

LET(chars,"0123456789",

IF(chars="",str,

ReplaceChars(

SUBSTITUTE(str,LEFT(chars),sub),
MID(chars,2,LEN(chars)-1),
sub
)
)
))
1个回答

1
在递归的LAMBDA()中嵌套LET()会很麻烦,因为每次在递归中使用变量时都会从头开始。因此,替换字符永远不会停止(如果我对此的解释正确的话)。但在您的情况下,甚至不需要创建递归的LAMBDA()来替换数字,例如:
=LAMBDA(str,LET(X,MID(str,SEQUENCE(LEN(str)),1),CONCAT(IF(ISNUMBER(X*1),"",X))))

该函数的核心现在是:

=LET(X,MID(A1,SEQUENCE(LEN(A1)),1),CONCAT(IF(ISNUMBER(X*1),"",X)))

可以在 LAMBDA() 之外很好地使用。我们甚至可以用其他东西来替换它。
=LET(X,MID(A1,SEQUENCE(LEN(A1)),1),CONCAT(IF(ISNUMBER(FIND(X,"0123456789")),"",X)))

要使用任何想要替换的字符执行相同的操作。

现在你可以调用=REPLACECHARS(A1)。然而,在我看来,使用变量的美感现在已经丧失了,原始方法(例如here)是我个人的首选。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接