正则表达式 Google 工作表匹配日期和月份的位数不同的日期

Regex Google sheets match dates that have different number of digits for day and month

在 google 工作表中,我希望能够从文本单元格中提取日期。我在 中找到了一个解决方案,但它没有考虑到我的日期格式不均。 他们可能有 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”结果为 -> 3-4-2019
“1-1-20 of 8-2-20 en dan 12-10-20” -> 2-10-20<>

月份和年份似乎都可以正常工作,但当天却不行,我该如何解决?

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

您可以使用

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

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

详情

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