正则表达式删除时区戳
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)))
在 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)))