是否有标准的POSIX符号允许您忽略某些单词?
例如,请考虑以下内容。
(x <- as.POSIXlt(Sys.time()))
# [1] "2014-11-03 08:24:39 PST"
fmt <- "Today is %A, %B %d %Y.\nThe time is %R and %S seconds."
cat(f <- format(x, fmt))
# Today is Monday, November 03 2014.
# The time is 08:24 and 39 seconds.
现在我想颠倒这个过程,使用f
返回与x
相同的对象。
希望我创建它的方式相同。但是,我需要忽略几个单词,所以我可能会有一个标准的POSIX符号来跳过格式化字符串中的单词。
我只知道如何使用grep
和strsplit
操纵字符串。以下是我目前用来获得理想结果的内容。
s <- sapply(c(fmt, f), strsplit, "[,. ]", USE.NAMES = FALSE)
vp <- vapply(s, function(x) {
paste(x[grep("[%]", s[[1]])], collapse = " ")
}, character(1))
strptime(vp[2], vp[1])
# [1] "2014-11-03 08:24:39 PST"
哪个有效。但是,在?strptime
中,我注意到换行符和字符串中的任意空格都有一些符号。但我没有看到任何允许你绕过的东西
词语的
%n
- 输出的换行符,输入上的任意空格。
%t
- 输出上的选项卡,输入上的任意空格。
是否存在用于跳过单词或短语的POSIX标准符号? 这种操作有更好的方法吗?
为了进一步澄清,我想从
开始> f
[1] "Today is Monday, November 03 2014.\nThe time is 08:24 and 39 seconds."
返回POSIXct
对象
[1] "2014-11-03 08:24:39 PST"
如果可能,仅使用strptime
和/或format
。
答案 0 :(得分:3)
试试这个:
> as.POSIXct(f, format = fmt)
[1] "2014-11-03 12:06:40 EST"
如果您尝试仅使用字符串操作提取组件,那么我们可以使用.*
来匹配垃圾:
library(gsubfn)
pat <- "(\\w+) (\\d+) (\\d+).* (\\d+):(\\d+) .* (\\d+)"
strapplyc(f, pat, simplify = c)
## [1] "November" "03" "2014" "12" "06" "40"
或
pat2 <- ".* (\\w+) (\\d+) (\\d+).* (\\d+):(\\d+) .* (\\d+).*"
gsubfn(pat2, "\\3-\\1-\\2 \\4:\\5:\\6", f)
## [1] "2014-November-03 12:06:40"