删除第二个冒号后的文本
Remove text after second colon
我需要删除第二个冒号后的所有内容。我有几种日期格式,需要使用相同的算法进行清理。
a <- "2016-12-31T18:31:34Z"
b <- "2016-12-31T18:31Z"
我尝试在两个列组上进行匹配,但我似乎无法找到如何删除第二个匹配组。
sub("(:.*){2}", "", "2016-12-31T18:31:34Z")
您可以使用的正则表达式:(:[^:]+):.*
您可以查看:regex101 并使用 like
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])
}
这样,您将捕获错误的时间戳字符串。
假设你有一个向量:
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 = ':'))
我需要删除第二个冒号后的所有内容。我有几种日期格式,需要使用相同的算法进行清理。
a <- "2016-12-31T18:31:34Z"
b <- "2016-12-31T18:31Z"
我尝试在两个列组上进行匹配,但我似乎无法找到如何删除第二个匹配组。
sub("(:.*){2}", "", "2016-12-31T18:31:34Z")
您可以使用的正则表达式:(:[^:]+):.*
您可以查看:regex101 并使用 like
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])
}
这样,您将捕获错误的时间戳字符串。
假设你有一个向量:
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 = ':'))