(已解决) 集算器函数按文本中的位置增删改

大佬们,请问集算器处理文本的函数中有没有按位置替换值的功能?

以我目前所熟悉的 spl 函数,处理文本替换的有两个:
1、regex@a ,正则替换所有匹配的文本;
2、replace,把文本中的 old_text 替换成 new_text

这两个函数是把所有指定的文本替换成对应的值,不能按位置替换,比如:

spl 中的 replace: =replace(“ACACA”,“A”,“X”) 就把所有的 A 替换成了 X,得到 XCXCX
这样的替换相当于 excel 函数中的 substitute,如下所示:

imagepng

excel 函数中也有一个 replace 函数,是按文本中的位置进行替换,比如,从第 3 位开始替换,替换 1 位,替换成 X,第 3 参数大于 0 表示替换:

imagepng

如果第 3 参数是 0,表示在 2 参表示的位置插入一个值,如下:

imagepng

如果第 3 参数大于文本长度,就直接替换至末尾,如下:

imagepng

第 2 参数所表示的索引必须大于 0,不支负数,第三参数所表示的替换长度要大于等于 0,大于 0 时表示替换,等于 0 时表示插入。同属于微软系的 Powery Query 也有类似的按位置替换的文本处理函数 Text.ReplaceRange 函数,功能跟 excel 函数是一样的,除了 2 参表示的索引下标不同,PQ 的索引下标是从 0 开始的,如下:

imagepng

在 spl 中,如果要处理成类似的结果,比如替换,要先按位置切片,然后拼接,比如:

imagepng

插入时同理,位置少切 1 位:

imagepng

或者先把文本变成序列,然后用序列中的 modify 或者 insert 方法处理替换、插入后再拼接:

imagepng

按位置插入时如下:
imagepng

按位置删除时用 delete:

imagepng

文本串 split 变成序列后,方法相对会多一些。这么多方法不能说不方便,但先拆后合,总感觉多了一步,个人感觉有点不利落。

我是在写异序词 (也就是文本串的排列) 时碰到了这个按位置替换的问题,如下所示,求出文本串 ACAA 的所有异序词,也就是所有字母的全排列拼成的文本串:

imagepng

所以,想恳请大佬们看看,有没有较简洁的方法来实现文本串中按位置增删改。