Regex 提取字符串的月份

Regex 提取字符串的月份,regex,r,date,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 0

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

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"

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

使用

该模式意味着:

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


另外请注意。

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

使用

该模式意味着:

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


另外请注意。

或者我们可以使用
lubridate
中的
month()
函数,前提是我们首先将字符串转换为
日期
对象

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

或者我们可以使用
lubridate
中的
month()
函数,首先将字符串转换为
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")

一个非常直观的建议。这将匹配一个月的前三个字母。可能不适用于所有情况,但很容易想到

 > 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"
>aa注册比赛(“2016年欧洲中部时间1月5日星期二03:29:10”,aa)
#[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"
>aa注册比赛(“2016年欧洲中部时间1月5日星期二03:29:10”,aa)
#[1] “一月”

试试这个
sub

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

尝试此
子项

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

只有当我们总是在英语环境下,@HaddE.Nuff同意,你的建议才更一般。只有当我们总是在英语环境下,@HaddE.Nuff同意,你的建议才更一般。我们不能只做
个月(截至日期(“2016年欧洲中部时间1月5日星期二03:29:10”,“a%b%d”)
也从基数R?或
个月.abb[as.POSIXlt](“2016年1月5日星期二03:29:10 CET”,format=“%a%b%d”)$mon+1]
@DavidArenburg
POSIXlt
对我来说总是很可怕,因为它们是如此巨大的物体……我们不能只做
个月(截止日期(“2016年1月5日星期二03:29:10 CET”、%a%b%d”)
也从R开始?或者
month.abb[as.POSIXlt(“2016年1月05:29:10 CET”,format=“%a%b%d”)$mon+1]
@DavidArenburg
POSIXlt
对我来说总是很可怕,因为它们是如此巨大的物体。。。