如何才能在Excel或Google表格中仅从文本字符串中提取数字?例如:
A1 - a1b23eg67
A2 - 15dgrgr156
所需结果为
B1 - 12367
B2 - 15156
发布于 2017-04-26 20:54:03
您可以在Google Sheets中使用捕获组来完成此操作
=REGEXREPLACE(A1,ʺ(\d)|.ʺ,ʺ$1ʺ)
任何与括号内容(一个数字)相匹配的内容都将被复制到输出中,其他任何内容将被替换为空字符串。
请参阅@Max Makhrov对this question的回答
或
=regexreplace(A1,ʺ[^\d]ʺ,ʺʺ)
删除任何不是数字的东西。
发布于 2017-04-26 21:10:51
因为你也要了Excel
如果您订阅了office 365 Excel,则可以使用此数组公式:
=--TEXTJOIN("",TRUE,IF(ISNUMBER(--MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)),MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),""))
为数组公式,需要在退出编辑模式时使用Ctrl-Shift-Enter确认,而不是Enter确认。如果操作正确,那么Excel将在公式周围放置{}
。
发布于 2017-04-26 20:50:08
我想有一种方法可以用=RegexExtract
实现这一点,但我想不出如何让它在第一次命中后重复搜索。在这些regex函数实现中,经常会有第三个参数需要重复,但看起来google并没有实现它。
无论如何,下面的公式可以解决这个问题。这只是一个小的环形交叉路口:
=concatenate(SPLIT( LOWER(A1) , "abcdefghijklmnopqrstuvwxyz" ))
这是将字符串转换为小写,然后使用字母表中的任何字母拆分字符串。这将返回一个由剩余数字组成的数组,我们将它们连接在一起。
更新,切换到=REGEXREPLACE()
而不是提取...:
=regexreplace(A1, "[a-z]", "")
这是一种比concat(split())的废话更清晰和明显的方法。
https://stackoverflow.com/questions/43634174
复制相似问题