是否有一个标准的POSIX符号用于忽略句子中的单词?

时间:2014-11-03 16:45:49

标签: r posix

是否有标准的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符号来跳过格式化字符串中的单词。

我只知道如何使用grepstrsplit操纵字符串。以下是我目前用来获得理想结果的内容。

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

1 个答案:

答案 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"