【问题标题】:Regex Google sheets match dates that have different number of digits for day and month正则表达式 Google 工作表匹配日期和月份位数不同的日期
【发布时间】:2020-10-23 08:42:27
【问题描述】:

在谷歌表格中,我希望能够从文本单元格中提取日期。我在RegEx get last match of a date format from string inside a Google Sheets cell 中找到了一个解决方案,但它没有考虑到我的日期格式不一样。 它们可能有 1 位或 2 位数字表示日,1 位或 2 位表示月份,2 位或 4 位表示年。

我已经调整了上面的解决方案以使用 d{1, } 查找多个数字:

"(?:.+)(\d{1,}-\d{1,}-\d{2,})" 但如果当天有 2 位数字,则第一位数字会下降

“1-8-2018 en 1-2-2019”结果 -> 1-2-2019
“26-3-19 en 23-4-2019”导致 -> 2019 年 3 月 4 日
“1-1-20 of 8-2-20 en dan 12-10-20”-> 2-10-20

它似乎在月份和年份都可以正常工作,但对于一天来说却不行,我该如何解决这个问题?

奖金问题: 大多数情况下,单元格中有 2 个日期,有时未来可能会有 3 个日期。我希望能够选择返回哪个日期。它现在正在选择最后一个日期。有没有办法从一开始就计算匹配的数量,然后选择一个?

【问题讨论】:

  • 您能否公开分享该工作表或复制该工作表以重现该问题?
  • 请记住,根据site guidelines,当答案解决您的问题时,accept 甚至upvote 它也可以让其他人受益。

标签: regex google-sheets re2


【解决方案1】:

你可以使用

^(?:.*?(\d{1,2}-\d{1,2}-\d{2}(?:\d{2})?)){2}

请参阅regex demo。由于末尾的 {2} 限制量词,这将选择每个字符串中的第二个日期。将限制数量调整为您需要的数量。

详情

  • ^ - 字符串开头
  • (?: - 非捕获组的开始(用于在此处对要量化的模式进行分组)
    • .*? - 除换行符之外的任何 0+ 字符,尽可能少(*? 是非贪婪的)
    • (\d{1,2}-\d{1,2}-\d{2}(?:\d{2})?) - 第 1 组(实际输出):一位或两位数,-,一位或两位数,-,两位数,然后是可选的两位数块
  • ){2} - 非捕获组结束,匹配两次

【讨论】:

    猜你喜欢
    • 2015-12-25
    • 2023-03-18
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    相关资源
    最近更新 更多