【问题标题】:Extracting a string from a cell从单元格中提取字符串
【发布时间】:2021-02-25 07:15:35
【问题描述】:

我在谷歌表格的单元格中有一些文本,例如 - February1—SG4601382 (PS xxxxx 12345.666 and 12345.667)

我正在尝试仅将 SG4601382 部分提取到另一个单元格中,S 字符的起始位置在每个单元格中有所不同,因为有时日期可能是二月 1 日,有时是二月 12。

有没有好心人知道我是怎么做到的?

【问题讨论】:

标签: google-sheets google-sheets-formula


【解决方案1】:

最短的应该是

=REGEXEXTRACT(B2,"—(\w+)")

或者作为一个数组

=INDEX(IFERROR(
     REGEXEXTRACT(B2:B,"—(\w+)")))

(根据您的需要调整范围和区域设置)

编辑 (在JvdV's comment之后)

作为“释放下面的所有单元格”的替代方法,请尝试

=QUERY(INDEX(REGEXEXTRACT(B2:B,"—(\w+)")), 
          "where Col1<>'#N/A' ")

【讨论】:

  • 做数组的好方法。我第一次看到IFERROR() 的用法。我会记住的。
  • @JvdV 如果你喜欢IFERROR() 的方式,我想你会喜欢QUERY 的方式。请检查更新的答案。
【解决方案2】:

或者,您应该可以使用regexextract

=regexextract(A2, "—(.*?)\s")

这可以很容易地变成一个数组公式。

=Arrayformula(if(len(A2:A), regexextract(A2:A, "—(.*?)\s"),))

【讨论】:

    【解决方案3】:

    如果您的数据足够通用,可以查找“-”,请尝试:

    =REGEXEXTRACT(A1,"—([A-Z0\d]+)")
    

    或者不那么具体:

    =REGEXEXTRACT(A1,"—(\S+)")
    


    编辑;作为数组:

    =INDEX(IF(A1:A="","",(REGEXEXTRACT(A1:A,"—(\S+)"))),)
    

    【讨论】:

      【解决方案4】:

      您可以使用SEARCH功能找到“S”

      的位置

      例如,如果“February1-SG4601382(PS xxxxx 12345.666 和 12345.667)”是您在 A1 单元格中的文本,那么

      =SEARCH("S",A1,0)
      

      这给你 “S” 的位置为 11

      现在如果 SG4601382 是每次长度为 10 的字符串,那么您可以使用如下 MID 公式提取它

      =MID(A1,SEARCH("S",A1,0),10)
      

      SG4601382

      【讨论】:

      • 如果您的字符串在所需数字之前以 S 开头,则此公式失败.. 为此,您需要搜索另一种模式,如本例中的“SG”而不是“S”
      猜你喜欢
      • 2011-08-04
      • 1970-01-01
      • 2012-12-01
      • 2018-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多