【问题标题】:Google Sheets / Google Data Studio - RegEx谷歌表格/谷歌数据工作室 - 正则表达式
【发布时间】:2019-11-29 14:34:31
【问题描述】:

我在 Google 表格中找到了单元格,其中包含一些用于跟踪锻炼进度的组合数据。它们看起来像这样:

80kg-3x5、100kg-1x3

对于给定的练习,即在上面挂起抓举,它表示我在给定日期为该练习所做的实际工作量,权重和相关的组 x 代表用逗号分隔。因此,对于一项练习,我可能只有一个工作量,或者几个(然后用逗号分隔)。我将它们放在一个单元格中以保持数据整洁,并减少锻炼后输入数据的时间。

现在要分析数据,我需要以某种方式分隔逗号分隔值。使用上述示例单元格数据的示例是该练习的总体积,表达式如下:

Sum( (digit before 'kg') * (digit before 'x') * (digit after 'x') + Same expression before, if comma ',' exists after first expression (multiple loads for the exercise) )

这应该是一项微不足道的任务,但我并没有过多地接触 google sheet 或 data studio 中的功能,而且我很难找到一种方法来使用适当的正则表达式遍历单元格中的内容,或其他方式。我可以在 python 和任何其他可视化软件中轻松做到这一点,但使用驱动工具采用这种方式的重点是它可以节省大量时间(如果它有效的话......)。我可以在 google sheet 中实现它,也可以在 Data Studio 中作为导入的新计算列来实现它,只要有可能。

【问题讨论】:

  • 与所需输出的示例共享您的工作表副本

标签: regex google-sheets google-data-studio re2


【解决方案1】:

如果您正在寻找编写自定义函数,这样的事情可能会成功(尽管它需要工作以更好地处理错误)

function workoutProgress(string) {
  if (string == '' || string == null || string == undefined) { return 'error';}
  var stringArray = string.split(",");
  var sum = 0;
  var digitsArray, digitsProduct;
  if ( stringArray.length > 0) {
    for (var element in stringArray) {
      digitsArray = stringArray[element].match(/\d{1,}/g);
      digitsProduct = digitsArray.reduce(function(product, digit){ return product*digit;});
      sum += digitsProduct;
    }
  }
  return sum;
}

【讨论】:

    【解决方案2】:

    可以使用下面的正则表达式Calculated Field来实现,其中Field代表各自的字段名称;每行代表一个工作负载(例如80kg-3x5),因此以下说明了5个工作负载(可以添加更多,例如可以通过复制粘贴第5行并将大括号中的数字加一来添加第6行——也就是把{4}改成{5}):

    (CAST(REGEXP_EXTRACT(Field,"^(\\d+)kg")AS NUMBER) * CAST(REGEXP_EXTRACT(Field,"^\\d+kg-(\\d+)")AS NUMBER) * CAST(REGEXP_EXTRACT(Field,"^\\d+kg-\\d+x(\\d+)")AS NUMBER)) + 
    (NARY_MAX(CAST(REGEXP_EXTRACT(Field,"^(?:\\d+kg-\\d+x\\d+,\\s){1}(\\d+)kg")AS NUMBER),0) * NARY_MAX(CAST(REGEXP_EXTRACT(Field,"^(?:\\d+kg-\\d+x\\d+,\\s){1}\\d+kg-(\\d+)")AS NUMBER),0) * NARY_MAX(CAST(REGEXP_EXTRACT(Field,"^(?:\\d+kg-\\d+x\\d+,\\s){1}\\d+kg-\\d+x(\\d+)")AS NUMBER),0)) +
    (NARY_MAX(CAST(REGEXP_EXTRACT(Field,"^(?:\\d+kg-\\d+x\\d+,\\s){2}(\\d+)kg")AS NUMBER),0) * NARY_MAX(CAST(REGEXP_EXTRACT(Field,"^(?:\\d+kg-\\d+x\\d+,\\s){2}\\d+kg-(\\d+)")AS NUMBER),0) * NARY_MAX(CAST(REGEXP_EXTRACT(Field,"^(?:\\d+kg-\\d+x\\d+,\\s){2}\\d+kg-\\d+x(\\d+)")AS NUMBER),0)) +
    (NARY_MAX(CAST(REGEXP_EXTRACT(Field,"^(?:\\d+kg-\\d+x\\d+,\\s){3}(\\d+)kg")AS NUMBER),0) * NARY_MAX(CAST(REGEXP_EXTRACT(Field,"^(?:\\d+kg-\\d+x\\d+,\\s){3}\\d+kg-(\\d+)")AS NUMBER),0) * NARY_MAX(CAST(REGEXP_EXTRACT(Field,"^(?:\\d+kg-\\d+x\\d+,\\s){3}\\d+kg-\\d+x(\\d+)")AS NUMBER),0)) +
    (NARY_MAX(CAST(REGEXP_EXTRACT(Field,"^(?:\\d+kg-\\d+x\\d+,\\s){4}(\\d+)kg")AS NUMBER),0) * NARY_MAX(CAST(REGEXP_EXTRACT(Field,"^(?:\\d+kg-\\d+x\\d+,\\s){4}\\d+kg-(\\d+)")AS NUMBER),0) * NARY_MAX(CAST(REGEXP_EXTRACT(Field,"^(?:\\d+kg-\\d+x\\d+,\\s){4}\\d+kg-\\d+x(\\d+)")AS NUMBER),0))
    

    Editable Google Data Studio Report, Embedded Data Source、可编辑数据集 (Google Sheets) 和 GIF 来详细说明,因此请随意更改字段名称(在数据源)以使字段适应计算字段:

    【讨论】:

      猜你喜欢
      • 2021-10-27
      • 2022-11-21
      • 2022-10-14
      • 1970-01-01
      • 2021-10-31
      • 1970-01-01
      • 2018-12-06
      • 2019-02-14
      相关资源
      最近更新 更多