我需要从以下格式的一系列字符串中提取月份:
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"
答案 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"