【问题标题】:RegEx get last match of a date format from string inside a Google Sheets cell正则表达式从 Google 表格单元格内的字符串中获取日期格式的最后匹配项
【发布时间】:2020-09-17 10:14:43
【问题描述】:

我的目标是在 Google 表格中使用正则表达式提取日期字符串和以下字符(表格函数:regexextract),其中字符串是单元格的最后一行,以日期格式“yyyy-DD-MM”开头,后跟“:”。 所以我目前拥有的 RegExpression 看起来像: \d{4}-\d{2}-\d{2}:.+

这可以正常工作,但它会返回第一个匹配项。相反,我想从单元格的末尾开始,并在有多个日期字符串时提取最后一个匹配项。这是因为内容是按日期升序存储在单元格内的。

样品池:

2020-05-20: Status update blah blah
2020-05-27: PO Issued blah blah

要求的结果: 我希望最终结果是一个以日期开头的字符串,以及“2020-05-27: PO Issued blah blah”后面的字符,这是最后一个结果。但是我总是得到第一场比赛,在上面的例子中是:“2020-05-20: Status update blah blah”

我也在使用 regexextract() 在谷歌表格中执行此操作 这对正则表达式没有影响,只是想提一下

编辑:我发现 Sheets 使用的是 RE2,所以我想它确实有所作为。

【问题讨论】:

  • 使用 RE2 会有很大的不同。但是,如果单元格中有多行字符串,并且想要获取最后一行开头的日期,请尝试 (?s).*\n(\d{4}-\d{2}-\d{2}:.*)。或者,(?s).*\n(\d{4}-\d{2}-\d{2}:[^\r\n]*)
  • 应该这样做REGEXEXTRACT(A1,"(?:.+)(\d{4}-\d{2}-\d{2})")
  • @WiktorStribiżew 您在 cmets 中发布的内容。非常感谢。我知道您提到它是重复的,但我关注的另一篇帖子没有用,但我没有意识到 Sheets 使用 RE2。这是正确的答案。
  • 是的,很抱歉它被否决了(不是我,这里有一些讨厌的人)。我没有完全得到您的要求,如果您真的只想匹配最后一行开头的日期,那么问题不是重复的。请在问题中准确说明您的要求。
  • @WiktorStribiżew 我修改了我的问题并注意我希望澄清这是一个不同的问题,然后是标记为类似欺骗的问题。谢谢

标签: regex google-sheets re2


【解决方案1】:

你可以使用

=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}:.*) I suggested in the top comment below the question 将匹配以日期开头的最后 ,请参阅 regex demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2014-09-23
    相关资源
    最近更新 更多