正则表达式删除时区戳

Regex to remove time zone stamp

在 Google 表格中,我的时间戳格式如下:

5/25/2022 14:13:05
5/25/2022 13:21:07 EDT
5/25/2022 17:07:39 GMT+01:00

我正在寻找一个会在时间过后删除所有内容的正则表达式,因此所需的输出将是:

5/25/2022 14:13:05
5/25/2022 13:21:07
5/25/2022 17:07:39

经过反复试验,我想出了以下正则表达式,尽管我不确定它是否容易出错:[^0-9:\/' '\n].*

Google Sheets 中我打算使用的函数是 REGEXREPLACE()。

我的目标是能够在不考虑时区的情况下进行计算,但是结果将带有用户本地时区的标记。

有人可以确认这是正确的吗?感谢我能得到的任何反馈!

你可以使用

=REGEXREPLACE(A1, "^(\S+\s\S+).*", "")
=REGEXREPLACE(A1, "^([\d/]+\s[\d:]+).*", "")

参见regex demo #1 / regex demo #2

详情:

  • ^ - 字符串开头
  • (\S+\s\S+) - 第 1 组:一个或多个 non-whitespaces、一个或多个空格和一个或多个 non-whitespaces
  • [\d/]+\s[\d:]+ - 一个或多个数字或 / 个字符、一个空格、一个或多个数字或冒号
  • .* - 尽可能多的除换行符之外的任何零个或多个字符。

是引用第 1 组值的替代反向引用。

使用您展示的示例,请尝试遵循 REGEXREPLACE 中的正则表达式。这将有助于专门匹配时间戳。这是以下正则表达式的 Online demo。这将只创建 1 个捕获组,我们用它来替换整个值(根据要求)。

=REGEXREPLACE(A1, "^((?:\d{1,2}\/){2}\d{4}\s+(?:\d{1,2}:){2}\d{1,2}).*", "")

说明:为上面使用的正则表达式添加详细说明。

^(                    ##Matching from starting of the value and creating/opening one and only capturing group.
   (?:\d{1,2}\/){2}   ##Creating a non-capturing group and matching 1 to 2 digits followed by / with 2 times occurrence here.
   \d{4}\s+           ##Matching 4 digits occurrence followed by 1 or more spaces here.
   (?:\d{1,2}:){2}    ##In a non-capturing group matching 1 to 2 occurrence of digits followed by colon and this combination should occur2 times.
   \d{1,2}            ##Matching 1 to 2 occurrences of digits.
)                     ##Closing capturing group here.
.*                    ##This will match everything till last but its not captured. 

您可以在没有 REGEX 的情况下通过简单地拆分和添加第一个和第二个索引来执行此操作。

=ARRAYFORMULA(
  IF(ISBLANK(A2:A),,
   INDEX(SPLIT(A2:A," "),0,1)+
   INDEX(SPLIT(A2:A," "),0,2)))