【问题标题】:Repeating a regex pattern for date parsing为日期解析重复正则表达式模式
【发布时间】:2018-09-27 12:23:55
【问题描述】:

我有以下字符串

"31032017"

我想在R中使用正则表达式来获取

"31.03.2017"

最好的功能是什么? 还有一个普遍的问题,我怎样才能重复匹配的部分,比如sed in bash?在那里,我们使用\1 重复第一个匹配的部分。

【问题讨论】:

    标签: r regex gsub


    【解决方案1】:

    您需要将单个部分放在圆括号中,如下所示:

    sub("([0-9]{2})([0-9]{2})([0-9]{4})", "\\1.\\2.\\3", "31032017")
    

    然后您可以使用 \\1 访问与第一组匹配的部分,使用 \\2 访问第二组,依此类推。

    请注意,如果您的字符串是日期,则有比直接使用正则表达式更好的方法来解析/重新格式化它。

    【讨论】:

    • 非常好,我会使用\\d 而不是[0-9],但这只是语法糖。
    【解决方案2】:
    date_vector = c("31032017","28052017","04052022")
    
    as.character(format(as.Date(date_vector, format = "%d%m%Y"), format = "%d.%m.%Y"))
    
    #[1] "31.03.2017" "28.05.2017" "04.05.2022"
    

    如果您想处理/计算日期,请省略 as.character

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多