我有一个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很大。
我还测试了以下公式。这里的问题是它给出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)))
答案 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。