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

时间:2016-07-15 16:55:03

标签: string excel parsing google-sheets excel-formula

以下是我要做的事情:

从一个类似于"收据28.19 walmart"或者"收据117.58 amazon",我希望能够将美元金额提取到不同的单元格。因此,一个函数将分别在每个单元格中放置28.19和117.58。

我知道你可以使用MID函数来提取文本字符串的一部分,如果你知道它的起始位置和长度,但问题在于它可能是不同的长度。例如,28.19的长度为5,但117.58的长度为6,因此我无法使用MID来获得总金额,因为所需子字符串的长度并不总是相同。

如果有人知道解决方法,请回复。此外,如果有一个适用于谷歌电子表格的解决方案,那也是可以接受的。我假设很多功能从excel到google sheet都是一样的。

4 个答案:

答案 0 :(得分:2)

如果您可以保证格式为[word][space][number][space][word],那么这应该有效:

From here

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

A1有“receipt 28.19 walmart

的地方

答案 1 :(得分:1)

您想要单元格中给出的字符串中两个空格之间的数字。因此,对于像#34;收据2356.14789 amazon"这样的字符串,我们必须找到空白的位置。

现在,为了找到字符串中第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)

所以,使用上面的公式在字符串中找到第一个和第二个空白:

B1和C1中我们有8和19的值是字符串中空格的位置。现在我们需要的结果是,让字符串成为

s with removal of "receipt " & " amazon"

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

所以,我们有起始位置,即第一个空白位置(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函数,

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

现在修剪此值,因为它将在"收据"的开头包含空格。

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

enter image description here

所以,最终公式如下:

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

第二种方法:

使用Delimit选择空格。快捷方式ALT-> A-> A-> E,界定选择空格,然后输入。

enter image description here

输出:

enter image description here

答案 2 :(得分:1)

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

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

这基本上是说你的字符串以任意数量的非数字字符\D+开头,后跟一些数字\d+,其中可能包含或不包含带有其他数字的小数,可能后跟更多非数字字符

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

请注意,这是专门针对Google表单的,因为您说您还想要一个

enter image description here

如果您需要能够对提取的文本求和,您可以将其包装在值中:

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

或者为了更方便,如果你有一整列值,你可以输入一个公式来运行你的正则表达式:

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

enter image description here

答案 3 :(得分:0)

请考虑以下事项。看看我是如何一步一步找到答案的。 =MID(A3,SEARCH(" ",A3)+1,SEARCH(" ",MID(A3,SEARCH(" ",A3)+1,LEN(A3)))-1)。如果您想了解更多信息,请查看此免费课程Len(), Search(), Trim()(链接将在10天后过期)。

Cruter complex formula writing... step by step