Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 删除第二个冒号后的文本_R_Regex_Regex Group - Fatal编程技术网

R 删除第二个冒号后的文本

R 删除第二个冒号后的文本,r,regex,regex-group,R,Regex,Regex Group,我需要去掉第二个冒号后的所有东西。我有几种日期格式,需要使用相同的算法进行清理 a <- "2016-12-31T18:31:34Z" b <- "2016-12-31T18:31Z" 您可以使用的正则表达式:(:[^:]+):.* 您可以查看:并像这样使用 sub("(:[^:]+):.*", "\\1", "2016-12-31T18:31:34Z") [1] "2016-12-31T18:31" sub("(:[^:]+):.*", "\\1", "2016-12-31T18

我需要去掉第二个冒号后的所有东西。我有几种日期格式,需要使用相同的算法进行清理

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

您可以使用的正则表达式:
(:[^:]+):.*

您可以查看:并像这样使用

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

将其作为一个机会,使部分时间戳验证程序与仅针对任何后续秒的验证程序相比较:

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])
}

remove_seconds假设你有一个向量:

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

谢谢,我正在考虑这个选项,但是希望代码使用正则表达式更加干净。
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 = ':'))