结合gsub调用并在字符串的最后一个实例后删除字符

时间:2017-05-30 19:43:09

标签: r regex

我有以下字符串:

time <- "2017-05-30T09:20:00-08:00"

我是用gsub来制作这个:

"2017-05-30 09:20:00"

这是我到目前为止所做的:

time2 <- gsub("T", " ", time)
gsub("\\-.*", "", time2) 

两个问题 -

  1. 如何删除- last 实例后的所有字符?
  2. 如何将这两个陈述合并为一个?

2 个答案:

答案 0 :(得分:2)

使用带有拼写正则表达式的sub一次调用捕获您感兴趣的部分,然后匹配其他所有内容。然后,在替换模式中使用替换后向引用 \1\2来重新插入这两个捕获的子部分:

^(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2}).*

请参阅regex demo

<强>详情:

  • ^ - 字符串的开头
  • (\d{4}-\d{2}-\d{2}) - 第1组:4位数,-,2位数,-,然后是2位数
  • T - T来信
  • (\d{2}:\d{2}:\d{2}) - 第2组:2位数,:,2位数,:和2位
  • .* - 字符串结尾的任何0+字符。

R online demo

time_s <- "2017-05-30T09:20:00-08:00"
sub("^(\\d{4}-\\d{2}-\\d{2})T(\\d{2}:\\d{2}:\\d{2}).*", "\\1 \\2", time_s)
## => [1] "2017-05-30 09:20:00"

答案 1 :(得分:0)

使用转换为DateTime

的函数可能更好
library(anytime)
format(anytime(time), "%Y-%m-%d %H:%M:%S")
#[1] "2017-05-30 09:20:00"
相关问题