Google sheets 如何使用regexreplace替换为LEFT

Google sheets 如何使用regexreplace替换为LEFT,google-sheets,google-sheets-formula,Google Sheets,Google Sheets Formula,我有一个列,其中每行有多个日期存储为文本 07082020 05092020 10122020 05062020 13052020 25122020 04032020 10112020 我想将其转换为ddmmmyyyy 07Aug2020 05Sep2020 10Dec2020 05Jun2020 13May2020 25Dec2020 04Mar2020 10Nov2020 日期格式更改无效。我想如果我将字符串更改为07-08-2020,它可能会识别。首先我试过 =regexreplace

我有一个列,其中每行有多个日期存储为文本

07082020 05092020 10122020
05062020 13052020
25122020 04032020 10112020
我想将其转换为ddmmmyyyy

07Aug2020 05Sep2020 10Dec2020
05Jun2020 13May2020
25Dec2020 04Mar2020 10Nov2020
日期格式更改无效。我想如果我将字符串更改为07-08-2020,它可能会识别。首先我试过

=regexreplace(D2,"2020","-2020")
它的工作,但我不知道如何插入后2位数字


如何实现这一点?

假设您的帖子中的原始字符串以D2开头,请尝试将以下公式放入从第2行向下打开的列的单元格2中:

=用于公式的数组替换替换替换替换替换替换过滤器&D2:D,D2:D,[0-9]{2}[0-9]{4},$1-$2-$3-$1-$1-$1-$1-$2-$1-$1-$1-$1-$1-$2-$3-$3-$4-$4-$5-$5-$6-$6-$7-$7-$7-$8-$8-$9-$9-$10-$11-$11-$12-$12-$

其核心是REGEXREPLACE:

REGEXREPLACEFILTER&D2:D,D2:D,[0-9]{2}[0-9]{2}[0-9]{4},$1-$2-$3

D2:D中的所有条目前面都有一个空格,根据过滤器的评估,这些条目不是空白的。这是为了实现每个字符串的一致性,即空格数字、空格数字等

然后,REGEXREPLACE查找空格,后跟括号中显示的三个分组:数字{2}、数字{2}、数字{4}。每个分组都用正则表达式编号;所以我们可以用模式1-dash-pattern 2-dash-pattern 3-dash替换该模式

从这里开始,包装替换调用只需将每次出现的-01-、-02-等替换为对应的三个字母的月份名称

这个数组公式应该处理整个D2:D字符串列


还可以使用其他方法,包括拆分、连接和转置;但是这种方法虽然看起来很长,但可能是最容易理解的。

假设您的原始字符串从D2开始,尝试将以下公式放入从第2行向下打开的列的单元格2中:

=用于公式的数组替换替换替换替换替换替换过滤器&D2:D,D2:D,[0-9]{2}[0-9]{4},$1-$2-$3-$1-$1-$1-$1-$2-$1-$1-$1-$1-$1-$2-$3-$3-$4-$4-$5-$5-$6-$6-$7-$7-$7-$8-$8-$9-$9-$10-$11-$11-$12-$12-$

其核心是REGEXREPLACE:

REGEXREPLACEFILTER&D2:D,D2:D,[0-9]{2}[0-9]{2}[0-9]{4},$1-$2-$3

D2:D中的所有条目前面都有一个空格,根据过滤器的评估,这些条目不是空白的。这是为了实现每个字符串的一致性,即空格数字、空格数字等

然后,REGEXREPLACE查找空格,后跟括号中显示的三个分组:数字{2}、数字{2}、数字{4}。每个分组都用正则表达式编号;所以我们可以用模式1-dash-pattern 2-dash-pattern 3-dash替换该模式

从这里开始,包装替换调用只需将每次出现的-01-、-02-等替换为对应的三个字母的月份名称

这个数组公式应该处理整个D2:D字符串列


还可以使用其他方法,包括拆分、连接和转置;但这种方法虽然看起来很长,但可能是最容易理解的。

正如@Erik Tyler所说,您可以将字符串、数字拆分为月份名称,然后合并所有结果:

=ARRAYFORMULA(JOIN(" ",
                         MID(TEXT(SPLIT(A1," "),"00000000"),1,2) &
                 TEXT(29*MID(TEXT(SPLIT(A1," "),"00000000"),3,2),"mmm") &
                            RIGHT(SPLIT(A1," "),4)
             ))

正如@Erik Tyler所说,您可以将字符串、数字拆分为月份名称,然后合并所有结果:

=ARRAYFORMULA(JOIN(" ",
                         MID(TEXT(SPLIT(A1," "),"00000000"),1,2) &
                 TEXT(29*MID(TEXT(SPLIT(A1," "),"00000000"),3,2),"mmm") &
                            RIGHT(SPLIT(A1," "),4)
             ))
你可以试试:

B1中的公式:

你可以试试:

B1中的公式:


嗨,这正是我要找的。我还没有弄明白如何使用regexreplace来实现这一点。伟大的您好@JvdV,您的公式似乎取决于Google Sheet上的时间格式,我的结果A1=08Jul2020 09May2020 12Oct2020日期和月份是reversed@DangD.Khanh,是的,我想是的,但是因为我似乎和op dd mmm yyyy有相同的时间格式,我认为它应该适合他。嗨,这正是我想要的。我还没有弄明白如何使用regexreplace来实现这一点。伟大的您好@JvdV,您的公式似乎取决于Google Sheet上的时间格式,我的结果A1=08Jul2020 09May2020 12Oct2020日期和月份是reversed@DangD.Khanh,是的,我想是的,但是因为我似乎和op dd mmm yyyy有相同的时间格式,我认为它应该适合他。