我需要刪除第二個冒號後的所有內容。我有幾種日期格式,需要使用相同的算法清理。刪除第二個冒號後的文本
a <- "2016-12-31T18:31:34Z"
b <- "2016-12-31T18:31Z"
我試圖以匹配兩個冒號組,但我似乎無法找出如何刪除第二場比賽組。
sub("(:.*){2}", "", "2016-12-31T18:31:34Z")
我需要刪除第二個冒號後的所有內容。我有幾種日期格式,需要使用相同的算法清理。刪除第二個冒號後的文本
a <- "2016-12-31T18:31:34Z"
b <- "2016-12-31T18:31Z"
我試圖以匹配兩個冒號組,但我似乎無法找出如何刪除第二場比賽組。
sub("(:.*){2}", "", "2016-12-31T18:31:34Z")
一個正則表達式,你可以使用:(:[^:]+):.*
,你可以檢查:regex101,並使用像
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 = ':'))
謝謝,我正在考慮這個選項,但希望代碼更正確地使用正則表達式。 –