使用R中的RegEx以Mon,DD,YYYY格式解析日期

Rac*_* B. 5 regex grep parsing r date

我试图从一串文本中解析一个日期.我假设最好的方法是使用正则表达式,但我还没有找到一个有效的解决方案.

首先,我使用CSS选择器从网站上获取日期.

date <-html_nodes(x=doc, css=".middleheadline+ .topnewsbar b") %>% html_text()
Run Code Online (Sandbox Code Playgroud)

这会产生:

[1] "\r\n        Washington,\r\n        Jan 5, 2011"
Run Code Online (Sandbox Code Playgroud)

我想从这个字符串中提取日期本身(这里是2011年1月5日).注意:月份可以是任何月份,日期可以是任何日期,年份可以是2011-2015之间的任何内容,所以我试图找到一个通常可以解析Mon D [D]中的日期的表达式, YYYY格式.

这是一次尝试:

date <-str_extract_all(string=date, pattern='[A-Z][a-z]{3,4} ([0-9]{1,2}), [0-9]{4}')
Run Code Online (Sandbox Code Playgroud)

这产生了 character(0)

而另一个:

grep("[A-Z][a-z]{3,4} ([0-9]{1,2}), [0-9]{4}", date, value=TRUE)
Run Code Online (Sandbox Code Playgroud)

这也产生 character(0)

有小费吗?

Ric*_*ven 5

你也可以试试strsplit().有时我更喜欢它而不是一个令人头脑麻木的正则表达式.

test <- c("\r\n        Washington,\r\n        Jan 5, 2011",
    "\r\n        Boston,\r\n        Mar 15, 2015")

vapply(strsplit(test, ".*\n\\s+"), "[", "", 2)
# [1] "Jan 5, 2011"  "Mar 15, 2015"

as.Date(vapply(strsplit(test, ".*\n\\s+"), "[", "", 2), "%b %d, %Y")
# [1] "2011-01-05" "2015-03-15"
Run Code Online (Sandbox Code Playgroud)


teo*_*eda 2

你可以试试这个:

date <-str_extract_all(string=date, pattern='\\w+\\s\\d+(st)?(nd)?(rd)?(th)?,\\s+\\d+')
Run Code Online (Sandbox Code Playgroud)

这里是测试链接。