从一串 dash-separated 值中获取一个字符串

Get a string out of a string of dash-separated values

我有一个 table 看起来像这样,(第 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 的公式上,以便我可以在我的字符串中得到 third 东西?

我想一旦我看到了 D2 的模式,我就可以继续进行 E2、F2 等

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

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

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

并复制:

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

=SPLIT(A2, "-")

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

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

对于独立于索引的最后 2 个项目:

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

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

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

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