(已解决) 关于函数 sbs 与文本切片

大佬们,下午好🙏 关于 spl 中的文本切片,我有几个问题恳请大佬们帮助指导。

spl 中有文本切片的函数,像 mid,left,right 均能切片,还有一个 s.sbs(a:b,…),取出字符串 s 中的多个子串组成新的字符串,其中参数 a:b 表示索引位置,可以写成以下几种形式:

1、a:b,最正常的写法,表示从位置 a 取到位置 b;

2、a: ,省略 b,表示从位置 a 取到最后 len(s);

3、 :b,省略 a,表示从开头位置 1 取到位置 b;

4、只写一个位置,比如 a,表示取位置 a 处的值;

5、只写一个冒号,表示取全部。

运用之后发现,sbs 在文本切片时会有以下限制:

1、位置 a 和 b 必须在字符串长度范围内,1<=a,b<=len(s),如果位置小于 1 或者大于 len(s) 就会抛出错误;

2、因为位置参数必须是正整数,自然就限制了负整数的使用。

但负整数可以表示从右往左倒着数,这一点在 spl 语法中是存在的,像函数 mid,left,right 里就可以使用负整数,还有序列切片时也能引用负整数,A.m(-1:-2)。

在其他编程语言中也有利用位置索引进行切片的语法,比如在 Python 语法里可以这样使用文本切片:string[start : end : step]

1、有三个参数,起始位置: 结束位置: 步长

2、索引位置支持负整数

3、有个步长参数,用于间隔取数,支持负整数步长

In my humble opinion,Python 中的切片语法倒是蛮不错的,所以,我就琢磨,spl 的 sbs 是否也能这样切片,my two cents as below:

1、s.sbs()能否实现支持负整数?不知道对排号键 k.sbs() 会不会有影响。若能支持负整数切片,会方便很多;

2、切片时索引越界能否不抛出错误?越界了就按正常字符串长度处理。

3、能否增加步长?比如,s.sbs(start : end : step),甚至是序列切片时的步长,序列.m(start : end : step)。若增加了步长,可以更简洁地实现间隔取值。除了 Python,像微软的 Power Query 也有专门的间隔取值函数 List.Alternate,Table.AlternateRows,虽然 spl 有 step 函数,但总归要去多转一步。序列间隔取值时还好,那文本间隔取值时转换就会比较多了,先 split 成序列,再用 step,取值后再 concat,会很繁琐。若能一步到位,使用就会很方便。

以上这些只是我不成熟的想法,我能想到的东西,大佬们肯定早就想到了。这个不是能不能实现的问题,是值不值得实现的问题,恳请大佬们得闲时考虑一下,谢谢!