如何从一个单元格提取parsing的数据到另一个
给定一个电子表格单元格,其中包含一个由连字符序列组成的string,我需要提取最后一个段。
例如,考虑包含数据string的列A,如XX-XXX-X-XX-XX-G10
,其中X
表示任何字符。 我需要在B栏中G10
什么公式才能得到G10
?
AB 1 XX-XXX-X-XX-XX-G10 G10
我正在寻找可以在Libre Office Calc,Open Office Calc,MS Excel或Google表格中使用的公式。
LO Calc中的另一种可能性是使用这里显示的通用正则expression式macros: https : //superuser.com/a/1072196/541756 。 那么单元格公式就类似于JPV的答案:
=REFIND(A1,"([^-]+$)")
如果您使用的是谷歌表格,regexextract也是可能的:
=REGEXEXTRACT(A1, "[^-]+$")
在LibreOffice Calc和OpenOffice Calc中,可以使用正则expression式来确定文本在最后一个字符之后的位置:
=SEARCH("-[:alnum:]+$";A1)
如果A1包含XX-XXX-X-XX-XX-G10
则返回15
。
现在,您可以使用这个值来使用RIGHT()函数将文本“置于”该位置后面:
=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 ) )
看来你需要在string末尾出现的字符,在连字符"-"
的最后一个实例的右边。
这个公式,从这里改编,适用于Excel,* Calc和Google Sheets:
=TRIM(RIGHT(SUBSTITUTE(A1,"-",REPT(" ",LEN(A1))),LEN(A1)))
说明:
-
SUBSTITUTE(A1,"-",new_string)
将从单元格A1
的原始string中find每个连字符("-"
),并将其replace为new_string
。 -
REPT(" ",LEN(A1))
是一个重复的空格string(" "
),与单元格A1
原始string的长度相同。 -
TRIM(RIGHT(string,count))
将得到最右边的count
字符,并删除前导和尾随空格。 由于string是用空格代替连字符的,因此string被填充了,count
和用于填充的LEN(A1)
是一样的,最后的count
字符由一堆空格组成,后面紧跟着最后一个连字符!
在Google表格中,另一种方法是使用SPLIT函数将列A中的值拆分为数组,然后select最后一个元素。 (Excel-VBA具有split()
函数,因此可以通过编写VBA代码将其作为自定义函数在Excel中进行工作。)
=INDEX(SPLIT(A1,"-"),0,COUNTA(SPLIT(A1,"-")))
我发现简单的解决scheme
= RIGHT(A1; 3)
那也给了我G10呢! 它的作品,因为COL A总是有3个字符在最后!