如何将解析数据从一个单元格提取到另一个单元格
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 个字符!
给定一个包含字符串的电子表格单元格,该字符串由一系列带连字符的字符段组成,我需要提取最后一段。
例如,考虑包含数据字符串的列 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 个字符!