我有一个字符串,需要替换其中的一些字符。 假设 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 部分) 但它不区分大小写(通过将每个单词大写作为最后一步来伪造),当我尝试对此进行更改时,它完全停止工作。
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))))