【问题标题】:Is there a standard POSIX symbol for ignoring words in a sentence?是否有用于忽略句子中单词的标准 POSIX 符号?
【发布时间】:2014-12-30 09:09:23
【问题描述】:

是否有标准的 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

【问题讨论】:

    标签: r posix


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • 好的,是的。现在我有点尴尬。但总的来说,是否有一个符号可以让我跳过一些单词?
    • 它是故意删除"Monday",还是我们需要一个可选的逗号?
    • 我们不需要星期几来使日期时间独一无二,所以我忽略了这一点。如果您也想要,请适当更改patpat2。 (在第二种情况下,替换字符串也必须更改。)
    猜你喜欢
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 2020-05-08
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多