1
mozilla-nss-3.11.4-0.7

gdb-10.12-1.5.2

glibc-dcc-atv-1.0.3-10.6

我也想在下一个 BCD 单元格中将其分开

mozilla-nss      3.11.4       0.7

gdb              10.12        1.5.2

glibc-dcc-atv    1.0.3        10.6

现在我可以使用 left , right 和 find 功能来做到这一点,但效果不太好

我用

LEFT(B33,FIND(".",B33)-2) =B cell

RIGHT(B33,FIND(".",B33))   =C Cell

RIGHT(D33,FIND("-",D33)-1)  = D Cell

答案不对任何人都可以帮我纠正我的功能谢谢

4

2 回答 2

2

这是一个不太完美的解决方案:

  1. 进行搜索和替换以删除任何不是分隔符的破折号。例如,将“mozilla-nss”替换为“mozillanss”
  2. 将您的值放入从 A1 开始的 A 列
  3. 在 B1 中,输入=LEFT(A1,FIND("-",A1)-1)
  4. 在 C1 中,输入=SUBSTITUTE(A1,B1,"")
  5. 在 D1 中,输入=SUBSTITUTE(LEFT(C1,FIND("-",C1,2)),"-","")
  6. 在 E1 中,输入=SUBSTITUTE(SUBSTITUTE(C1,D1,""),"-","")
  7. 填写A列中所有值的方程式。
    编辑:添加下一行:
  8. 用 mozilla-nss 替换“mozillanss”。

您的答案在 B、D 和 E 列中。

于 2013-01-21T19:09:16.500 回答
2

这里的关键点使任务变得困难 - 我们需要将字符串中的最后两个连字符用作分隔符,并保持所有其余部分不变。对于这种情况,ARRAY 公式是最好的选择。我的解决方案如下:

  1. 命名以 A1 开头的 6 列:字符串 | 最大"-" | 第二个最大值“-” | Str1 | STR2 | STR3
  2. 将您的值放在从 开始的 A 列中A2
  3. B2 ( MAX "-" ): 键入公式=MAX(IFERROR(SEARCH("-",$A2,ROW(INDIRECT("1:"&LEN($A2)))),0)),但按CTRL+ SHIFT+ENTER而不是通常的ENTER- 这将定义一个 ARRAY 公式并在{}其周围产生括号(但不要手动键入它们!)。
  4. C2 ( 2nd MAX "-" ): 输入公式=MAX(IFERROR(SEARCH("-",$A2,ROW(INDIRECT("1:"&LEN($A2)))),0)*IF(IFERROR(SEARCH("-",$A2,ROW(INDIRECT("1:"&LEN($A2)))),0)=MAX(IFERROR(SEARCH("-",$A2,ROW(INDIRECT("1:"&LEN($A2)))),0)),0,1))并再次按CTRL+ SHIFT+ ENTER

因此,我们将获得字符串中最后两个连字符的位置。剩下的很简单——普通的 LEFT / MID / RIGHT 东西:

  1. D2: =LEFT($A2,$C2-1), ENTER.
  2. E2: =MID($A2,$C2+1,$B2-$C2-1), ENTER.
  3. F2: =RIGHT($A2,LEN($A2)-$B2), ENTER.
  4. 自动填充B:F

如果不需要临时列 B:C - 您应该在 D:F 中为 B:C 内容替换对它们的引用(即用 A2 实际公式替换$A2=LEFT($A2,,但这将导致太复杂的 ARRAY 公式,仍然在做他们的工作 - 但是即使对于创作者来说,第二天也很难理解)

至于上述解决方案 - 也许它可能会被改进或简化,但我对这种ROW...INDIRECT结构非常熟悉,因为我不得不分析兆字节的统计数据,所以对我来说,它就像创建 LEFT / RIGHT 一样容易。无论如何,它似乎工作。

为了您的方便,我共享了我的示例文件:https ://www.dropbox.com/s/p49x32t3a0igtby/StringHyphensSeparate.xlsx

希望对您有所帮助)

添加 - 2个更简化的解决方案来查找最后两个连字符(其余步骤与上述相同):

  • 更简单的 ARRAY 公式:

    • B2 ( MAX "-" ): 键入公式=MAX(IF(MID($A2,ROW(INDIRECT("1:"&LEN($A2))),1)="-",ROW(INDIRECT("1:"&LEN($A2))),0)),但按CTRL+ SHIFT+ENTER而不是通常的ENTER- 这将定义一个 ARRAY 公式并在{}其周围产生括号(但不要手动键入它们!)。
    • C2 ( 2nd MAX "-" ): 输入公式=LARGE(IF(MID($A2,ROW(INDIRECT("1:"&LEN($A2))),1)="-",ROW(INDIRECT("1:"&LEN($A2))),0),2)并再次按CTRL+ SHIFT+ ENTER
  • SUBSTITUTE使用函数的正则公式:

    • B2(MAX“-”):输入公式=SEARCH("@",SUBSTITUTE($A2,"-","@",LEN($A2)-LEN(SUBSTITUTE($A2,"-",""))))ENTER
    • C2 ( 2nd MAX "-" ): 输入公式=SEARCH("@",SUBSTITUTE($A2,"-","@",LEN($A2)-LEN(SUBSTITUTE($A2,"-",""))-1)), ENTER.

解决方案的关键SUBSTITUTE是它可能仅替换某些匹配实例,即仅替换第 2 或第 3 个连字符。连字符的总数再次通过SUBSTITUTE公式确定:原始字符串的长度减去所有连字符替换为空字符串的字符串长度:LEN($A2)-LEN(SUBSTITUTE($A2,"-",""). 这里还有一个技巧 - 虽然我们应该保持原始字符串完好无损,但我们仍然可以对它做任何事情以获得中间解决方案!因此,我们将连字符替换为@,然后@在临时字符串中搜索。

以上所有解决方案都有效,请选择您喜欢/更好理解的解决方案。希望这也有助于理解数组公式,因为对于相同的任务有两种不同的方法。

我更新了示例文件以包含最后 2 个示例 + 生成的大型公式,没有中间步骤,链接相同且位于上方。祝你好运!

于 2013-01-22T07:59:55.710 回答