使用正则表达式添加日期

时间:2017-02-02 14:38:46

标签: r regex

有人可以告诉我如何使用正则表达式将日期添加到日期吗?

这是我的开始代码:

#Create data frame
a = c("01/2009","03/2006","","12/2003") 
b = c("03/2016","05/2010","07/2011","") 
df = data.frame(a,b) 

以下是我要创建的内容:

#Create data frame
a = c("01/01/2009","03/01/006","","12/01/2003") 
b = c("03/01/2016","05/01/2010","07/01/2011","") 
df = data.frame(a,b) 

我试过这样的事情:

 df$c <- gsub("(/.*)","\\01/\\1", df$a, perl=TRUE)

但显然没有得到我正在寻找的结果。我是regex的新手,正在寻求帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

如果您拥有的是dd/yyyy或空值,则无需使用正则表达式。只需使用文字字符串替换:

gsub("/","/01/", df$a, fixed=TRUE)

只需用/子字符串替换所有/01/个符号。

如果您必须确保只更改属于2-digits/4-digits模式的字符串,请使用

gsub("^(\\d{2})/(\\d{4})$", "\\1/01/\\2", df$a)

模式匹配:

  • ^ - 字符串开头
  • (\\d{2}) - 捕获第2组匹配2位数
  • / - 文字/
  • (\\d{4}) - 捕获匹配4位数的组#2
  • $ - 字符串结束。

替换模式包含\\1,对第1组捕获值的反向引用,/01/作为文字子字符串和\\2反向引用(即捕获到第2组中的值)。

R demo

> a = c("01/2009","03/2006","","12/2003")
> b = c("03/2016","05/2010","07/2011","") 
> df = data.frame(a,b) 
> gsub("/","/01/", df$a, fixed=TRUE)
[1] "01/01/2009" "03/01/2006" ""           "12/01/2003"
> gsub("^(\\d{2})/(\\d{4})$", "\\1/01/\\2", df$a)
[1] "01/01/2009" "03/01/2006" ""           "12/01/2003"