regex - 从 Google 表格上的文本中提取特定数字?
问题描述
数据如下表所示。我试图从文本中提取小时(h)和分钟(m)来计算谷歌表格中的总持续时间。ex 3h 24m 等于 3.4 我无法正确提取分钟部分。
我尝试了以下功能,这些功能在小时部分运行良好,但在分钟部分失败。
=LEFT(c1, SEARCH("h",c1)-1)
=IFERROR((REGEXEXTRACT(D1,"([[:print:]]+)h")),0)
C D
4h 2h 49m
32m 19s 2h 2m
6h 7m 3h 24m
解决方案
要将小时、分钟和秒提取到单独的列中,您可以使用三个单独的REGEXEXTRACT
公式:
=IFERROR(REGEXEXTRACT(C1,"(\d+)h"), "")
=IFERROR(REGEXEXTRACT(C1,"(\d+)m"), "")
=IFERROR(REGEXEXTRACT(C1,"(\d+)s"), "")
这里,(\d+)
是一个捕获组,它抓取 1 个或多个数字并且后面的字母刚好匹配,因此函数不返回。
您也可以尝试使用可选模式提取每个部分:
=REGEXEXTRACT(C1, "(?:(\d+)h)?\s*(?:(\d+)m)?\s*(?:(\d+)s)?")
在这里,所有小时、分钟和秒模式都是可选的,即使缺少小时,分钟仍然会匹配。
细节
(?:(\d+)h)?
- 用非捕获组包裹的可选小时部分:(\d+)
- 第一组:一位或多位数字h
-h
信
\s*
- 0+ 个空格(?:(\d+)m)?
- 一个可选的分钟部分:(\d+)
- 第 2 组:一位或多位数字m
-m
信
(?:(\d+)s)?
- 一个可选的秒部分:(\d+)
- 第 3 组:一位或多位数字s
-s
信
推荐阅读
- linux - QKeyEvent::text() 在 Linux 上不返回重音字母
- excel - 如果不为空,则在所选行下方插入空白行
- tensorflow - 几步之后的Tensorflow 2.0 OOM
- c++ - 在 C++ 中,如何返回多个对象并从 RVO 中受益
- salesforce - 销售队伍中的案例函数公式
- c# - 获取嵌套层次结构返回无效状态代码
- angular - 带有可观察字符串数组的角度垫表返回列标题错误
- css - 包括 Bootstrap 混乱的 CSS
- javascript - 将页脚发送到页面末尾
- graphql - Gatsby & GraphQL:将字符串字段转换为降价