提取字符串的月份

时间:2016-03-22 22:06:46

标签: regex r date

我需要从以下格式的一系列字符串中提取月份:

Tue Jan 05 03:29:10 CET 2016

我尝试过:

#extracting the second capturing group
sub("([A-z]{3})\\s([A-z]{3})","\\2","Tue Jan 05 03:29:10 CET 2016")

#or just the first whitespace with the Month:
sub("\\s([A-z]{3})","\\2","Tue Jan 05 03:29:10 CET 2016")

我的预期输出,在这种情况下将是:

"Jan"

4 个答案:

答案 0 :(得分:4)

或者我们可以使用month()中的lubridate函数,因为我们首先将字符串转换为Date对象。

library(lubridate)
month(as.Date("Tue Jan 05 03:29:10 CET 2016", "%a %b %d"), label = TRUE)
#[1] Jan

或@ {HaddE.Nuff建议的base R:

format(as.Date("Tue Jan 05 03:29:10 CET 2016", "%a %b %d"), "%b")

答案 1 :(得分:1)

您需要匹配整个字符串并将所需内容捕获到捕获组中,以便稍后使用反向引用来恢复其值。

使用

> sub("^[[:alpha:]]{3}\\s+([[:alpha:]]{3})\\b.*", "\\1", "Tue Jan 05 03:29:10 CET 2016")
[1] "Jan"

模式意味着:

  • ^ - 匹配字符串的开头
  • [[:alpha:]]{3} - 匹配3个字母
  • \\s+ - 匹配1+空格
  • ([[:alpha:]]{3})\\b - 匹配并捕获第1组三个字母作为整个单词(\b是单词边界标记)
  • .* - 0+任何字符(直到字符串的结尾)

请参阅regex demo

ALSO 请注意[A-z] should be avoided

答案 2 :(得分:1)

一个非常直观的建议。这将匹配一个月的前三个字母。可能不适用于每一个案例,但想起来很简单。

 > aa <- regexpr("Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec","Tue Jan 05 03:29:10 CET 2016")
 > regmatches("Tue Jan 05 03:29:10 CET 2016",aa)
#[1] "Jan"

答案 3 :(得分:1)

试试这个sub

sub("... (...).*", "\\1", "Tue Jan 05 03:29:10 CET 2016")
## [1] "Jan"