正则表达式 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 组的末尾,匹配两次
在 google 工作表中,我希望能够从文本单元格中提取日期。我在
我已经调整了上面的解决方案以使用 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 组的末尾,匹配两次