使用 2 列作为“字典”来替换字符串中的字符

问题描述 投票:0回答:2

我有一个字符串,需要替换其中的一些字符。 假设 1234AaCD 必须替换为 1Ą3Ęx•7D 现在,因为用什么字符替换什么字符的规则很复杂,所以我有两列字符。 在 A 列中我有源字符,在 B 列中我有替换:

答:来源 B:替换品
2 Ą
4 Ę
A x
a
C 7

如果在 A 列中找不到 string 中的 char,则保持原样。 如果在 A 列中找到 char,则将其替换为 B 列中的任何字符(可能是 1 个字符,可能是几个字符,可能是空的(因此替换为“”)。 而且我还需要区分大小写。

我还应该提到,我的“字典”不仅仅是几行,就像示例中那样,它有数百行,所以我宁愿避免嵌套 RegexReplace。还因为我们将来可能需要添加额外的行,这将需要非常繁琐的工作来修复嵌套公式。

我已经在这里找到了类似的东西:通过 Google 表格上的公式删除变音符号(第 2 部分) 但它不区分大小写(通过将每个单词大写作为最后一步来伪造),当我尝试对此进行更改时,它完全停止工作。

string google-sheets replace
2个回答
0
投票

您可以尝试:

=arrayformula(let(Σ,A3,Λ,mid(Σ,sequence(len(Σ)),1),
   join(,map(Λ,lambda(x,iferror(+tocol(if(find(x,F2:F),G2:G,),3),x))))))

logic

  • 通过此提取每个字符
    mid(Σ,sequence(len(Σ)),1)
  • 使用 find()(区分大小写)在
    source
    中查找匹配项,如果找到则检索
    replacement
    ;如果没有找到任何内容,请保持原始字符不变

0
投票

使用

REDUCE
函数可以很好地解决这个问题

=REDUCE(A10,SEQUENCE(5),LAMBDA(str,i,SUBSTITUTE(str,INDEX(A2:A6,i),INDEX(B2:B6,i))))

这个公式等价于:

=SUBSTITUTE(
   SUBSTITUTE(
     SUBSTITUTE(
       SUBSTITUTE(
         SUBSTITUTE(A10,A2,B2),
         A3,B3),
       A4,B4),
     A5,B5),
   A6,B6)

编辑 - 如果您想使其适用于开放范围,请将

5
替换为
COUNTA(A2:A)
并删除范围的最后一行。

=REDUCE(D3,SEQUENCE(COUNTA(A2:A)),LAMBDA(str,i,SUBSTITUTE(str,INDEX(A2:A,i),INDEX(B2:B,i))))

© www.soinside.com 2019 - 2024. All rights reserved.