Google电子表格:拆分字符串并返回最后N个元素

时间:2017-03-03 15:33:03

标签: google-sheets

我在一列中有字符串(" - ")分隔数据(字母数字,可变长度),格式为......

Column A
"aaa-bbb-ccc"
"ddd-bbb-eee"
"aaa-fff-ggg"

我已经能够使用array_constrain()在其他地方返回部分数据,但这是从数组开头到数组末尾的N个元素,所以我可以...

aaa               (num_cols = 1)
aaa-bbb           (num_cols = 2)
aaa-bbb-ccc       (num_cols = 3)

我希望从分割数据中获取最后N个元素,所以......

bbb-ccc   OR 
ccc

num_cols只从数组的开头到数组的后面,这对我的场景没有好处。

This answer对类似的问题建议使用regexextract()来检索最后一个值,如果我的RegEx Foo更强,那么也许我可以在正确的方向上稍微轻推一下。

我知道可以使用index(),但是一次只能从拆分数据中返回一个元素,这样就会变得混乱/低效。

所以问题是有人知道如何从数组返回最后N个元素吗?普通的排序不会起作用,但是反转阵列可能会有效。

2 个答案:

答案 0 :(得分:0)

没有reverse功能。我看到两种方式:

  1. 写小函数是sctipt:reverse array
  2. 使用丑陋的巨大公式
  3. 巨大的公式样本

    =JOIN("-",QUERY({ArrayFormula(ROW(INDIRECT("A1:A"&COUNTA(SPLIT(A1,"-"))))),TRANSPOSE(SPLIT(A1,"-"))},"select Col2 order by Col1 desc limit 2 "))

    在公式末尾更改limit 2以获得N个最后元素。

    脚本示例

    试试这个:

    function reverseLine(line) {
      return line[0].reverse();
    } 
    

    用作自定义公式:=reverseLine(B1:D1) 换行:aaa bbb ccc返回:

    ccc
    bbb
    aaa
    

答案 1 :(得分:0)

如果变量长度完全来自附加到前三个字符的格式-aaa的集合数,则可以从前面剥离这三个字符和所需的更多集合:

=replace(A1,1,find("-",A1)*B1,"")

其中A1包含aaa-bbb-ccc之类的内容,B1包含要删除的前三个字符的附加数量加一。