【问题标题】:Split string and then remove prefix in Google Sheets (Again)拆分字符串,然后删除 Google 表格中的前缀(再次)
【发布时间】:2021-10-17 22:05:36
【问题描述】:

我的 Google 表格填充了以下格式的不同字符串:

Monday: 12:00 PM – 12:00 AM,Tuesday: 12:00 PM – 12:00 AM,Wednesday: 12:00 PM – 12:00 AM,Thursday: 12:00 PM – 12:00 AM,Friday: 12:00 PM – 12:00 AM,Saturday: 12:00 PM – 12:00 AM,Sunday: 12:00 PM – 12:00 AM

我的目标是将字符串拆分为不同的列,然后从每个单元格中删除前缀,以创建如下内容:

Monday Tuesday Wednesday Thursday Friday Saturday Sunday
12:00 PM – 12:00 AM 12:00 PM – 12:00 AM 12:00 PM – 12:00 AM 12:00 PM – 12:00 AM 12:00 PM – 12:00 AM 12:00 PM – 12:00 AM 12:00 PM – 12:00 AM

我使用公式 =arrayformula(REGEXEXTRACT(SPLIT(B2, ",", true), ":\s(.*)")) ,正如 Goran Here 所建议的那样,它工作得非常好,直到我每天得到多个时间范围的字符串,就像这样:

Monday: 12:00 – 4:00 PM, 6:00 PM – 12:00 AM,Tuesday: 12:00 – 4:00 PM, 6:00 PM – 12:00 AM,Wednesday: 12:00 – 4:00 PM, 6:00 PM – 12:00 AM,Thursday: 12:00 – 4:00 PM, 6:00 PM – 12:00 AM,Friday: Closed,Saturday: Closed,Sunday: 12:00 – 4:00 PM, 6:00 PM – 12:00 AM

现在公式不知道如何处理这种情况,我该如何解决它并使我的公式相应地起作用?请帮忙!

更新: 我不确定我是否成功,似乎它正在工作,但我正在分享一个link 让你仍然看看!

【问题讨论】:

  • 分享您的工作表副本以及所需结果的示例

标签: regex google-sheets google-sheets-formula


【解决方案1】:

不知道是不是和beforwardsImport JSON into Google Sheets一样的问题,不过我已经准备好了答案……

function timeTable(url,e) {
  if (url.match(/http(s)?:\/\/?/g)){var data = JSON.parse(UrlFetchApp.fetch(url).getContentText())}
  else{var data = JSON.parse(url)}
  var result=[]
  for (var i=0;i<=6;i++){
    result[6-data.result.opening_hours.periods[i][e].day]=data.result.opening_hours.periods[i][e].time
  }
  return [result]
}

with e = 打开或关闭/复制https://docs.google.com/spreadsheets/d/1uvs89rcG6HkPKXXsCmNUOjy5sCQxaJMSHobQLzS-vHY/copy

【讨论】:

  • 我现在来看看这个正则表达式问题。
【解决方案2】:

一个解决方案,但可能需要改进......

=transpose(split(substitute(substitute(substitute(REGEXEXTRACT(A1,"Monday[:0-9\–, APM]+"),", ","|"),": ","|"),",",""),"|"))

然后将星期一替换为星期二、星期三等。

【讨论】:

    【解决方案3】:

    这应该对你有用,假设每个字符串至少包含一周中七个命名天中的每一天的内容:

    =ArrayFormula(REGEXREPLACE(SPLIT(REGEXREPLACE(","&amp;B2,"[^,]*day:\s*","~"),",~",0,1),",\s*",CHAR(10)))

    如果您需要将此应用于 B2:B 中的多个原始字符串,请先确保输出范围(例如 C2:I)明确,然后使用此版本的公式:

    =ArrayFormula(IF(B2:B="",,REGEXREPLACE(SPLIT(REGEXREPLACE(","&amp;B2:B,"[^,]*day:\s*","~"),",~",0,1),",\s*",CHAR(10))))

    ADDENDUM(阅读有关希伯来语内含物的评论后):

    看看这是否适用于希伯来语:

    =ArrayFormula(IF(B2:B="",,REGEXREPLACE(SPLIT(REGEXREPLACE(","&amp;B2:B,",[^,]+:\s","~"),"~",0,1),",\s*",CHAR(10))))

    如果没有,请按照我在下面的附加评论,分享指向工作表副本的链接。

    附录 #2(在进一步的 cmets 之后)

    控制每个变量超出了任何免费论坛的范围。这将超越共享信息或推动我所谓的“实际工作”(即定制的、时间密集的、专家服务)的正确方向。不过,我将提供一个额外的公式变体来涵盖您的最新更新:

    =ArrayFormula(IF(A3:A10="",,SUBSTITUTE(REGEXREPLACE(SPLIT(REGEXREPLACE(REGEXREPLACE(REGEXREPLACE(","&amp;A3:A10,",[^,]+:\s","~"),"(\d)(\d\d)(\D)","$1:$2$3"),"(:\d\d)","$1*"),"~",0,1),",\s*",", "),"*","")))

    【讨论】:

    • 英文效果很好,我猜这个公式假设所有标题都以“day:”结尾?我的文档最初是希伯来语的,我们说日子名称的方式非常不同,我们有一个固定的前缀,希伯来语单词“day”,然后是那一天的名字。诸如“第一天:”、“第二天:”、“第三天:”之类的东西,仍然可以让它工作吗?
    • 请记住,我们只知道您告诉我们和展示给我们的内容。出于这个原因,最好尽可能多地分享你的真实工作表的细节。也就是说,我会要求您将具有链接权限(在创建链接时设置)的工作表副本共享给“知道链接的任何人......”和“编辑”。这将是我或其他任何人获取所有详细信息以帮助您的最有效和最有效的方式。如果还不是 100% 清楚,请当时指出,字符串是从左到右还是从右到左。
    • 在帖子中查看我的附录和附加公式。如果可行,问题就解决了。如果没有,请分享链接。
    • 从您的工作表中的数据来看,它似乎正在工作(即,产生与“所需结果”部分相同的输出)。除非将来的字符串与当前工作表中显示的原始格式不同,否则您应该已准备就绪。一旦您可以删除“所需结果”部分,我建议您更改当前公式版本中的 A3:A10 引用以覆盖整个列:A3:A。只需确保首先清楚整个输出范围 (B2:H)。
    • 请参阅“附录#2”和您的表格以获取更新的公式。了解论坛现在发送的警报基本上是警告“一个帖子的内容太多了”。我相信这个最后的迭代将服务于您的目的。如果没有,我鼓励您提交另一个独特的帖子,您可以在其中微调对社区的额外请求。祝你好运。
    猜你喜欢
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2011-05-08
    相关资源
    最近更新 更多