如何从一个单元格提取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个字符在最后!