从一串以破折号分隔的值中获取字符串

时间:2018-01-07 23:27:34

标签: excel string excel-formula google-sheets google-sheets-query

我有一个看起来像这样的表,(第1行仅作为标题):

 |----------A----------|---------B--------|--------C---------|---------D--------|
1|  String of Strings  |     Thing  1     |     Thing  2     |     Thing  3     |
 |---------------------|------------------|------------------|------------------|
2|   q1-22ll-o7kp-e... |         q1       |       22ll       |     ??????       |
 |---------------------|------------------|------------------|------------------|

使用this指南,我已成功填写B2和C2单元格:

B2:=LEFT(A2, SEARCH("-",A2,1)-1)

C2:=MID(A2, SEARCH("-",A2) + 1, SEARCH("-",A2,SEARCH("-",A2)+1) - SEARCH("-",A2) - 1)

我试图理解D2的模式。我不完全掌握C2正在做什么 - 我将如何建立C2的公式,以便我可以在我的字符串中获得第三个​​事物?

我想,一旦我看到D2的模式,我就可以继续选择E2,F2等。

我希望找到适用于Google表格或Excel的解决方案。

3 个答案:

答案 0 :(得分:3)

使用 A2 中的数据,在 B2 中输入:

=TRIM(MID(SUBSTITUTE($A2,"-",REPT(" ",999)),COLUMNS($A:A)*999-998,999))

并复制:

enter image description here

答案 1 :(得分:2)

在Google表格中,您可以在B2中使用SPLIT,它会将结果扩展到右侧的单元格:

=SPLIT(A2, "-")

对于每个单独的部分,您可以使用INDEX

=INDEX(SPLIT(A2, "-"), , 1)
=INDEX(SPLIT(A2, "-"), , 2)
...

对于与索引无关的最后2项:

=REGEXEXTRACT(A2, ".*-(.*)-")
=REGEXEXTRACT(A2, ".*-(.*)")

答案 2 :(得分:0)

虽然B2的公式使用直截了当的LEFT,但C2的公式有点复杂,并使用函数MID(text, start_num, num_chars)

  • text显然是输入单元格= A2
  • start_num是输出开始的索引,在本例中为SEARCH("-",A2) + 1,它是第一个-之后的一个字符。
  • num_chars是输出将包含的字符数。这是棘手的部分!它实际上通过从第二个破折号的索引中减去第一个破折号的索引来计算第一个-和第二个-之间的字符数。

这不是递归解决此问题的最佳方法,但我相信理解每个代码非常重要,以便下次编写最佳代码。