我有一个字符串让我这样说
Ankit说:2013年5月13日上午10:55你摇滚
而且,我希望从中获取日期
2013年5月13日
有什么方法可以在R中做到这一点吗?我已经通过以下方式尝试了strptime函数:
strptime("Ankit says: May 13, 2013 at 10:55 am you rock", " %b %d, %Y")
Run Code Online (Sandbox Code Playgroud)
我明白了 "NA"
但是,当我在日期之前没有任何语言的时候尝试它
strptime("May 13, 2013 at 10:55 am you rock", " %b %d, %Y")
Run Code Online (Sandbox Code Playgroud)
我输出为 "2013-05-13"
我也试过正则表达式
grep("Ankit says: May 13, 2013 at 10:55 am you rock", "?(?:[a-zA-Z]*)(\\s+)(?:[0-9]*)(,)(\\s+)(?:[0-9]*)")
Run Code Online (Sandbox Code Playgroud)
这使用strapply了gsubfn包.它将正则表达式pat与每个字符串相匹配,这些字符串将与正则表达式的括号部分匹配的子字符串作为单独的参数进行匹配to.POSIXct,然后最终组合该函数的输出.我们假设每个实例中都存在相同的日期和时间格式,但对周围文本没有太多假设:
library(gsubfn)
s <- c("Ankit says: May 13, 2013 at 10:55 am you rock",
"The date is Jun 6, 2013 and the time is 11:18 pm")
pat <- "(\\w+ \\d{1,2}, \\d{4}).*(\\d{2}:\\d{2} [ap]m)"
to.POSIXct <- function(d, t) as.POSIXct(paste(d, t), format = "%b %d, %Y %I:%M %p")
strapply(s, pat, to.POSIXct, simplify = "c")
Run Code Online (Sandbox Code Playgroud)
这使
[1] "2013-05-13 10:55:00 EDT" "2013-06-06 23:18:00 EDT"
Run Code Online (Sandbox Code Playgroud)
更新:更正