2017-09-14 225 views
0

我需要删除第二个冒号后的所有内容。我有几种日期格式,需要使用相同的算法清理。删除第二个冒号后的文本

a <- "2016-12-31T18:31:34Z" 
b <- "2016-12-31T18:31Z" 

我试图以匹配两个冒号组,但我似乎无法找出如何删除第二场比赛组。

sub("(:.*){2}", "", "2016-12-31T18:31:34Z") 

回答

1

一个正则表达式,你可以使用:(:[^:]+):.*

,你可以检查:regex101,并使用像

sub("(:[^:]+):.*", "\\1", "2016-12-31T18:31:34Z") 
[1] "2016-12-31T18:31" 
sub("(:[^:]+):.*", "\\1", "2016-12-31T18:31Z") 
[1] "2016-12-31T18:31Z" 
0

使用它作为一个机会,使部分时间戳,验证器只是针对任何尾随秒数:

remove_seconds <- function(x) { 
    require(stringi) 
    x <- stri_trim_both(x) 
    x <- stri_match_all_regex(x, "([[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}T[[:digit:]]{2}:[[:digit:]]{2})")[[1]] 
    if (any(is.na(x))) return(NA) 
    sprintf("%sZ", x[,2]) 
} 

这样,你会捕获错误的时间戳字符串。

0

让说你有一个载体:

date <- c("2016-12-31T18:31:34Z", "2016-12-31T18:31Z", "2017-12-31T18:31Z") 

然后,你可以通过把它分解“:”且只取前两个元素丢弃休息:

out = sapply(date, function(x) paste(strsplit(x, ":")[[1]][1:2], collapse = ':')) 
+0

谢谢,我正在考虑这个选项,但希望代码更正确地使用正则表达式。 –