【问题标题】:extract the month of a string提取字符串的月份
【发布时间】:2016-03-22 22:06:45
【问题描述】:

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

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"

【问题讨论】:

    标签: regex r date


    【解决方案1】:

    或者我们可以使用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")
    

    【讨论】:

    • 我们不能也从基础 R 做 months(as.Date("Tue Jan 05 03:29:10 CET 2016", "%a %b %d")) 吗?
    • month.abb[as.POSIXlt("Tue Jan 05 03:29:10 CET 2016", format = "%a %b %d")$mon + 1]
    • @DavidArenburg POSIXlt 总是让我害怕,因为它们是如此巨大的物体......
    【解决方案2】:

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

    使用

    > 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

    请注意[A-z] should be avoided

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 仅当我们始终处于英语区域时。
      • @HaddE.Nuff 同意,您的建议更笼统。
      【解决方案4】:

      试试这个sub:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-18
        • 2020-02-12
        • 2021-01-19
        • 1970-01-01
        • 2021-12-05
        • 2021-01-25
        相关资源
        最近更新 更多