繁体   English   中英

谷歌表格 - 在特定文本或字符之前/之后或之间提取数字

[英]Google Sheets - extract numbers before/after or between specific text or characters

我需要一个仅从包含这些数字和其他字符的单元格中提取数字的公式。
我尝试了几种不同的公式,但它们产生了不同的结果。
问题是如果数字在列表中的第一位,我只能得到我想要的值。 如果它在不同的字符之间,我也会得到我需要提取的值之前的内容。
我创建了一个包含一些基本示例的工作表,只是为了了解我想要实现的目标以及到目前为止我已经尝试过的目标。

这是单子

+-------------------+
|       Data        |
+-------------------+
| 5cats/3dogs       |
| 5cats/3pigs       |
| 5pigs/2dogs/6cats |
| 12dogs/3cats      |
+-------------------+

我对谷歌表格真的很陌生,所以我在这个论坛上搜索了几个线程后才来到当前的公式,所以任何进一步的帮助和指导将不胜感激!

尝试:

=ARRAYFORMULA(QUERY(QUERY(
 SPLIT(FLATTEN(SPLIT(REGEXREPLACE(A2:A5, "\d+", ), "/")&"×"&
 SPLIT(REGEXREPLACE(A2:A5, "(?:)[a-z]+", ), "/")&"×"&ROW(A2:A5)), "×"), 
 "select max(Col2) where Col3 is not null group by Col3 pivot Col1"), 
 "select Col2,Col1,Col3 offset 1", )*1)

在此处输入图像描述

对于动态溢出数组,您可以尝试以下公式-

=BYROW($A$2:$A,LAMBDA(x,IF(x="",,IFERROR(REGEXEXTRACT(QUERY(FLATTEN(SPLIT(x,"/")),"select * where Col1 like '%" & LOWER(H$1) & "%'"),"\d+"),0))))

见工作簿工作表名称harun24hr

在此处输入图像描述

编辑:基于@marikamitsos 答案中的公式,您可以使用-

=BYROW($A$2:$A,LAMBDA(x,IFERROR(IF(x="",,REGEXEXTRACT(x,"(\d+)"&LOWER(K$1))),0)))

在此处输入图像描述

您可以将每列的基本公式更改为这个简单的公式

=INDEX(IF(A2:A7="",, 
   IF(REGEXMATCH(A2:A7,"dogs"), REGEXEXTRACT(A2:A7,"(\d+)dogs"),0)))

(请根据您的范围调整公式并删除其中的所有内容)

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM