从电子表格中的单个单元格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+?")),))