字符替换

时间:2018-09-08 07:09:34

标签: google-sheets

我有一个UniCode字符串UniStr。

我还有一个{UniCodeChar:otherMappedStrs}

的MAP。

我需要UniStr的“ otherMappedStrs”版本。

例如:UniStr ='ABC',MAP = {'A':'233','B':'#$','C':'9ij'},结果='233#$ 9ij'

我想出了下面的公式;

=ArrayFormula(JOIN("",VLOOKUP(REGEXEXTRACT(A1,REPT("(.)",LEN(A1))),MapRange,2,FALSE)))

作为一个完整字符集(40个字符)的MAP很大。

  1. 我需要在多个电子表格中使用此功能。如何将MAP纳入可移植性公式中?
  2. 除了公式中的REGEXEXTRACT方法以外,还有没有更好的方法来迭代一个字符串?此方法对长字符串有限制。

我还测试了以下公式。这里的问题是它给出2个结果(或SUBSTITUTE替换中的数组大小)。如果进行了3次替换,则得出三个结果。这可以解决吗?

=ArrayFormula(SUBSTITUTE(A1,{"s","i"},{"@","#"}))

编辑;

@Tom的第一个解决方案最适合我的情况(1)REGEX对搜索标准有上限,但不妨碍您的解决方案(2)感觉很快(未进行经验测试)(3)我相信,迭代字符串的更好方法,我相信(您回答了我的问题2-谢谢)

我在这里离题。我希望Google会引入命名公式或公式别名。在这种情况下,假设如下。我已经多次按照这些路线发送反馈。没什么((

 MyFormula($str) == ArrayFormula(join(,vlookup(mid($str,row(indirect("1:"&len($str))),1), { "A","233";"B","#$";"C","9ij" },2,false))) 

2 个答案:

答案 0 :(得分:1)

您似乎有几个不同的问题,但是仅考虑可移植性,也许以下内容可能会有所帮助:

=join(,switch(arrayformula(regexextract(A1&"",rept("(.)",len(A1)))),"A",233,"B","#$","C","9ij"))

扩展了37对。

答案 1 :(得分:1)

不确定字符串要多长,但是比较传统

=ArrayFormula(join(,vlookup(mid(A1,row(indirect("1:"&len(A1))),1), { "A","233";"B","#$";"C","9ij" },2,false)))

对于长字符串来说似乎更健壮。

对于一个更激进的想法,假设otherMappedStrings的最大长度为3个字符,那么您可以尝试:

=ArrayFormula(join(,trim(mid("233 #$9ij",find(mid(A1,row(indirect("1:"&len(A1))),1), "ABC")*3-2,3))))

我在#$之前放置了一个空格,以将其填充为3个字符。

顺便说一句,原始的VLOOKUP不区分大小写。如果您想要这种行为,请使用SEARCH而不是FIND。