【问题标题】:Extract a changing number from a Google Sheets string with a formula使用公式从 Google 表格字符串中提取变化的数字
【发布时间】:2021-01-18 10:14:26
【问题描述】:

我会定期收到以 Google 表格文件结尾的更新。为了使用这个字符串中的数据(见下文),我想提取第三个数字。其余数据的相关性较低。我想在 Google 表格中执行此操作,因此我需要句子中的 '250' 并将其保存在新列中。使这更具挑战性的是价值观的变化。例如,一天可能是 4000,而下一天只有 10。

“这是您的每日摘要。每日新客户报告 - 荷兰 1 月 17 日, 2021 这是您的每日摘要。 250 +28.1% 新客户 取消订阅。”

我在表格中使用下面的公式进行了尝试,但这没有考虑到数字可能包含的不同位数。

=ARRAYFORMULA(if(isblank(B2:B)," ",REGEXEXTRACT(B2:B, "\d{3}?")))

希望你能帮我解决这个问题!

【问题讨论】:

    标签: google-sheets google-sheets-formula


    【解决方案1】:

    你可以试试:

    C2中的公式:

    =ARRAYFORMULA(IF(LEN(B2:B),REGEXEXTRACT(B2:B,"^(?:\D*\d+){2}\D*(\d+)"),""))
    

    或者不那么冗长:

    =IFERROR(INDEX(REGEXEXTRACT(B2:B,"^(?:\D*\d+){2}\D*(\d+)"),,),"")
    

    对模式本身的更多解释:

    ^(?:\D*\d+){2}\D*(\d+)
    
    • ^ - 开始字符串锚点。
    • (?: - 打开非捕获组。
      • \D*\d+ - 零个或多个非数字,最多超过 1 个数字。
      • ){2} - 关闭非捕获组并匹配两次。
    • \D* - 零个或多个非数字。
    • (\d+) - 第一个捕获组持有 1 个以上数字。

    请参阅在线 RE2 demo

    注意1:我们不想在第一个重复模式上使用捕获组,因为REGEXEXTRACT() 将提取第一个捕获组。

    注 2: 也可以写成:^\D*\d\D*\d+\D*(\d),它不那么冗长,但 IMO 不如使用分组那么简洁。

    【讨论】:

    • 你刚刚打败了我!看起来不错。你能提醒我什么吗?:是什么意思?
    • 谢谢@TomSharpe。我编辑了答案以解释正则表达式模式。
    【解决方案2】:

    尝试:

    =ARRAYFORMULA(IF(B2:B="",,REGEXEXTRACT(B2:B, "est. (\d+) ")*1))
    


    或更短:

    =INDEX(IFERROR(REGEXEXTRACT(B2:B, "est. (\d+) ")*1))
    

    【讨论】:

    • 如果文本是这样标准化的,那也是一个不错的选择 =)
    猜你喜欢
    • 2015-01-25
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多