如何将解析数据从一个单元格提取到另一个单元格

How to extract parsed data from once cell to another

给定一个包含字符串的电子表格单元格,该字符串由一系列带连字符的字符段组成,我需要提取最后一段。

例如,考虑包含数据字符串的列 A,如 XX-XXX-X-XX-XX-G10,其中 X 表示任何字符。我需要在 B 列中放置什么公式才能得到 G10 作为结果?

            A                B
1   XX-XXX-X-XX-XX-G10      G10

我正在寻找可以在 Libre Office Calc、Open Office Calc、MS Excel 或 Google Sheets 中使用的公式。

您似乎想要出现在字符串末尾的字符,在最后一个连字符实例的右侧,"-"

此公式改编自 here,适用于 Excel、*Calc 和 Google 工作表:

=TRIM(RIGHT(SUBSTITUTE(A1,"-",REPT(" ",LEN(A1))),LEN(A1)))

解释:

  • SUBSTITUTE(A1,"-",new_string) 将在单元格 A1 的原始字符串中找到每个连字符 ("-") 并将其替换为 new_string.

  • REPT(" ",LEN(A1)) 是一串重复的 space 个字符 (" "),与单元格 A1 中的原始字符串长度相同。

  • TRIM(RIGHT(string,count)) 将获得最右边的 count 个字符,trim 前导和尾随 space 字符。由于字符串之前是通过用 spaces 替换连字符来填充的,并且 count 与用于该填充的 LEN(A1) 相同,最后的 count 字符由一堆spaces 后跟最后一个连字符后面的任何内容!

在 Google Sheets 中,另一种方法是使用 SPLIT 函数将 A 列的值拆分为一个数组,然后 select 最后一个元素。 (Excel-VBA 有一个 split() 函数,因此您可以通过编写 VBA 代码将其作为自定义函数来在 Excel 中使用。)

=INDEX(SPLIT(A1,"-"),0,COUNTA(SPLIT(A1,"-")))

如果您使用的是 google 工作表,正则表达式可以:

=REGEXEXTRACT(A1, "[^-]+$")

在 LibreOffice Calc 和 OpenOffice Calc 中,您可以使用正则表达式来确定文本在最后一个 - 字符之后的位置:

=SEARCH("-[:alnum:]+$";A1)
如果 A1 包含 XX-XXX-X-XX-XX-G10.

将 return 15

现在,您可以使用 RIGHT() 函数使用此值获取该位置的文本 "behind":

=RIGHT(A1;LEN(A1)-SEARCH("-[:alnum:]+$";A1))

分成多行:

=RIGHT(                ' return text beginning from the right...
    A1;                ' of cell A1 ...
    LEN(A1)            ' start at lenght(A1) = 18
    -                  ' minus ...
    SEARCH(            ' position ...
        "-[:alnum:]+$" ' of last "-" ...
        ;A1            ' in cell A1 = 15 ==> last three characters
    )
)

LO Calc 中的另一种可能性是使用此处显示的通用正则表达式宏:https://superuser.com/a/1072196/541756。然后单元格公式将类似于 JPV 的答案:

=REFIND(A1,"([^-]+$)")

我找到了简单的解决方案:

=RIGHT(A1;3)

这也给了我 G10 作为结果!它之所以有效,是因为 COL A 的末尾总是有 3 个字符!