RegEx 从 Google Sheets 单元格中的字符串获取日期格式的最后一个匹配项
RegEx get last match of a date format from string inside a Google Sheets cell
我的 objective 是在 Google 工作表中使用正则表达式提取日期字符串和后续字符(工作表函数:regexextract),其中字符串是单元格的最后一行并以日期开头格式 "yyyy-DD-MM" 后跟“:”。
所以我目前拥有的 RegExpression 看起来像:
\d{4}-\d{2}-\d{2}:.+
这工作正常,但它 returns 第一场比赛。相反,我想从单元格的末尾开始,并在有多个日期字符串时提取最后一个匹配项。这是因为单元格中的内容按日期升序存储。
示例单元格:
2020-05-20: Status update blah blah
2020-05-27: PO Issued blah blah
要求的结果:
我希望最终结果是以日期开头的字符串以及“2020-05-27:PO Issued blah blah”后面的字符,这是最后的结果。但是,我总是得到第一个匹配项,在上面的示例中是:“2020-05-20:状态更新等等”
我也在 google 工作表中使用 regexextract() 这样做,这对正则表达式没有影响,但只是想提一下。
编辑: 我发现 Google 表格使用的是 RE2,所以我想它确实有所作为。
您可以使用
=REGEXEXTRACT(A1, "(?m)^\d{4}-\d{2}-\d{2}:.*\z")
查看 RE2 regex demo 和 Google 表格屏幕截图:
(?m)^\d{4}-\d{2}-\d{2}:.*\z
正则表达式匹配
(?m)
- 一个 MULTILINE 修饰符,使 ^
匹配行的开头,$
匹配行的结尾
^
- 行首
\d{4}-\d{2}-\d{2}:.*
- 4 位数字,-
,2 位数字,-
,2 位数字,:
然后是行的其余部分,因为 .
默认不匹配换行字符
\z
- 字符串的最后(它不受 (?m)
修饰符的影响)。
注意 (?s).*\n(\d{4}-\d{2}-\d{2}:.*)
will match the last lines starting with a date, see a regex demo.
我的 objective 是在 Google 工作表中使用正则表达式提取日期字符串和后续字符(工作表函数:regexextract),其中字符串是单元格的最后一行并以日期开头格式 "yyyy-DD-MM" 后跟“:”。
所以我目前拥有的 RegExpression 看起来像:
\d{4}-\d{2}-\d{2}:.+
这工作正常,但它 returns 第一场比赛。相反,我想从单元格的末尾开始,并在有多个日期字符串时提取最后一个匹配项。这是因为单元格中的内容按日期升序存储。
示例单元格:
2020-05-20: Status update blah blah
2020-05-27: PO Issued blah blah
要求的结果: 我希望最终结果是以日期开头的字符串以及“2020-05-27:PO Issued blah blah”后面的字符,这是最后的结果。但是,我总是得到第一个匹配项,在上面的示例中是:“2020-05-20:状态更新等等”
我也在 google 工作表中使用 regexextract() 这样做,这对正则表达式没有影响,但只是想提一下。
编辑: 我发现 Google 表格使用的是 RE2,所以我想它确实有所作为。
您可以使用
=REGEXEXTRACT(A1, "(?m)^\d{4}-\d{2}-\d{2}:.*\z")
查看 RE2 regex demo 和 Google 表格屏幕截图:
(?m)^\d{4}-\d{2}-\d{2}:.*\z
正则表达式匹配
(?m)
- 一个 MULTILINE 修饰符,使^
匹配行的开头,$
匹配行的结尾^
- 行首\d{4}-\d{2}-\d{2}:.*
- 4 位数字,-
,2 位数字,-
,2 位数字,:
然后是行的其余部分,因为.
默认不匹配换行字符\z
- 字符串的最后(它不受(?m)
修饰符的影响)。
注意 (?s).*\n(\d{4}-\d{2}-\d{2}:.*)