r - 在 R 中处理日期正则表达式捕获组输出

标签 r regex dplyr regex-group

我试图将日期从两种格式强制转换为一种我可以轻松输入 as.Date 的格式。 .这是一个示例:

library(dplyr)
df <- data_frame(date = c("Mar 29 2017 9:30AM", "5/4/2016"))

我试过这个:
df %>% 
  mutate(date = gsub("([A-z]{3}) (\\d{2}) (\\d{4}).*", 
                     paste0(which(month.abb == "\\1"),"/\\2","/\\3"), date))

但它给了我这个:
      date
1 /29/2017
2 5/4/2016

但我想要这个!
      date
1 3/29/2017
2 5/4/2016

看起来像当我使用 month.abb == "\\1" 时,它不使用捕获组输出( "Mar" ),它只使用调用者文本( "\\1" )。如果可能,我想在正则表达式中执行此操作。我知道你可以用另一种方式来做,但想要变得圆滑。

有任何想法吗?

最佳答案

这是 gsubfn 的一种方式

library(gsubfn)
df$date <- gsubfn("^([A-Za-z]{3})\\s+(\\d{2})\\s+(\\d{4}).*", function(x, y, z) 
                  paste(match(x, month.abb),y, z, sep="/"), df$date)
df$date
#[1] "3/29/2017" "5/4/2016" 

sub结合 gsubfn
sub("(\\S+)\\s+(\\S+)\\s+(\\S+).*", "\\1/\\2/\\3", 
      gsubfn("^([A-z]{3})", setNames(as.list(1:12), month.abb), df$date))
#[1] "3/29/2017" "5/4/2016" 

关于r - 在 R 中处理日期正则表达式捕获组输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43621499/

相关文章:

r - 任何可用于从特定日期的不均匀付款中计算 IRR 的包?

r - 从 data.frame 分配唯一变量

r - 计算组平均值,同时使用dplyr排除当前观察值

java - 为什么 String.split ("£", 2) 不工作?

r - Bind_rows() 错误 : "Argument 1 must have names"//Occurs after tidyverse update

r - 如何对组内的特定大小进行采样?

r - 何时使用 approxfun 与 approx

识别向量中的给定模式并添加缺少的元素以获得给定模式的重复

javascript - 名字的Js正则表达式

java - 在字符类中使用 $ anchor 不起作用