从电子表格中的单个单元格parsing或提取文本

这是我想要做的:

从具有“收据28.19沃尔玛”或“收据117.58亚马逊”之类的单元格开始,我希望能够将美元数额提取到不同的单元格。 所以一个函数将分别在每个单元格中放置28.19和117.58。

我知道你可以使用MID函数来提取部分文本string,如果你知道它在哪里开始和它是多久,但问题是这可能是不同的长度。 例如,28.19的长度是5,但117.58的长度是6,所以我不能使用MID总是得到总金额,因为所需子string的长度并不总是相同的。

如果有人知道这个解决scheme,请回应。 此外,如果有一个在谷歌电子表格中的解决scheme,这也是可以接受的。 我假设很多function都是从Excel到谷歌表单相同。

您希望单元格中给出的string中的两个空格之间的数字。 所以,像“收据2356.14789亚马逊”这样的string,我们必须find空白的位置。

现在,要findstring中第n个空格的位置,我们可以使用这些公式

1st Position : =find(" ",a1) 2nd Position : =find(" ",a1,find(" ",a1)+1) 3rd Position : =find(" ",a1,find(" ",a1,find(" ",a1)+1)+1) ........... Nth position : =find(" ",a1,find(" ",a1,find(" ",a1,find(" ",a1,......n-1 times find(" ",a1)+1)+1)+1.....n-1 times +1) 

因此,使用上面的公式findstring中的第一个和第二个空白:

在B1和C1中,我们有8和19的值是string中空格的位置。 现在我们想要的结果是,让string是

 s with removal of "receipt " & " amazon" 

现在我们可以使用MID函数来获取输出。 MID函数: =MID(text,start_num,num_chars)从文本string的中间返回字符,给定起始位置和长度。

所以,我们有起始位置,即第一个空白位置(8),我们必须计算num_chars即长度。

要计算长度,我们必须做以下计算:

 subtract the len of "amazon" from total len of string length of substring s2 : =len(a1)- FIND(" ",A1,FIND(" ",A1)+1) which is second blank pos. add len of sub string1 and sub string2 s2 + FIND(" ",A1) 

现在,使用中间函数,我们将得到,

 =MID(A1,FIND(" ",A1),F1,(LEN S1+ LEN S2)) 

现在修改这个值,因为它将包含开始“收据”的空白区域。

 =trim(MID(A1,FIND(" ",A1),F1,(LEN S1+ LEN S2))) 

在这里输入图像说明

所以最后的公式如下:

 =TRIM(MID(A1,FIND(" ",A1),LEN(A1)-FIND(" ",A1,FIND(" ",A1)+1)+FIND(" ",A1))) 

第二种方法:

使用分隔符和select空格。 快捷键ALT-> A-> A-> E,分隔select空格,然后input。

在这里输入图像说明

输出:

在这里输入图像说明

如果你能保证格式是[word][space][number][space][word] ,那么这应该工作:

从这里 :

=TRIM(MID(SUBSTITUTE(A1," ",REPT(" ",LEN(A1))), (2-1)*LEN(A1)+1, LEN(A1)))

A1有“ receipt 28.19 walmart

考虑以下。 看看我是如何一步一步find答案的。 =MID(A3,SEARCH(" ",A3)+1,SEARCH(" ",MID(A3,SEARCH(" ",A3)+1,LEN(A3)))-1) 。 如果你想了解更多,结帐这个免费的教训Len(),search(),修剪() (链接到期10天)。

复杂的配方写作...一步一步来

最简单的方法和我个人最喜欢的方法是使用正则expression式提取:

 =REGEXEXTRACT ("YOUR TEXT", "\D+(\d+\.?\d+)\D+?") 

这基本上是说你的string开始于任何数字的非数字字符\D+后跟一些数字\d+ ,可能包括也可能不包含与另一个数字的小数,可能后面跟着更多的非数字字符

数字模式周围的括号是指示它只提取该值

请注意,这是专门针对Google工作表的,因为您曾经表示您也想在那里安装Google工作表

在这里输入图像说明

如果你需要能够总结你提取的文本,你可以包装它的价值:

 =VALUE(REGEXEXTRACT (A1 , "\D+(\d+\.?\d+)\D+?")) 

或者为了更方便,如果你有一整列的值,你可以input一个公式,将运行你的正则expression式:

 =ARRAYFORMULA(IF(LEN(O1:O)>0,VALUE(REGEXEXTRACT (O1:O , "\D+(\d+\.?\d+)\D+?")),)) 

在这里输入图像说明