问题描述
在Google表格中,我希望能够从文本单元格中提取日期。我在[MS-OAUT]: OLE Automation Protocol,2.2.26 DECIMAL中找到了一个解决方案,但没有考虑到我的日期格式不正确。 他们可能在一天中使用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 zh 23-4-2019”的结果-> 3-4-2019
“ 8月1日至20日,8月20日到20日20”-> 2-10-20
看来月和年都可以,但是白天却不行,我该如何解决?
奖金问题: 通常,该单元格中有2个日期,将来可能还有3个。我希望能够选择返回哪个日期。现在选择最后一个日期。有没有一种方法可以从一开始就计算出匹配数,然后选择一个?
解决方法
您可以使用
^(?:.*?(\d{1,2}-\d{1,2}-\d{2}(?:\d{2})?)){2}
请参见regex demo。由于末尾有{2}
限定词,因此将在每个字符串中选择第二个日期。将限制数调整为所需的数量。
详细信息
-
^
-字符串的开头 -
(?:
-一个非捕获组的开始(用于对要在此处量化的模式进行分组)-
.*?
-除换行符以外的任何0+字符,并且尽可能少(*?
是非贪婪的) -
(\d{1,2}-\d{2}(?:\d{2})?)
-第1组(实际输出):一位或两位数,-
,一位或两位数,-
,两位数,然后是两位数的可选块
-
-
){2}
-非捕获组的末尾,匹配两次出现