我有一个问题,我认为这是通过在R中使用正则表达式来解决的。
我有一组日期(如chr),我想以不同的格式(如chr)。
我试图愚弄下面的例子,其中第一个(new_dates)给出了1-9个月的正确格式而10-12个错误,而(new_dates2)给出了10-12的正确格式但是没有1个-9。
我看到第一种情况下的代码与10-12的两位数相匹配,但不知道怎么告诉它只匹配一位数字。
正确日期的最终向量显示了我想要的结果。
dates <- c("1/2016", "2/2016", "3/2016", "4/2016", "5/2016", "6/2016", "7/2016", "8/2016", "9/2016", "10/2016", "11/2016", "12/2016", "1/2017")
new_dates <- sub("(\\d)[:/:](\\d{4})","\\2M0\\1", dates)
new_dates2 <- sub("(\\d{2})[:/:](\\d{4})","\\2M\\1", dates)
correctdates <- c("2016M01", "2016M02", "2016M03", "2016M04", "2016M05", "2016M06", "2016M07", "2016M08", "2016M09", "2016M10", "2016M11", "2016M12", "2017M1")
答案 0 :(得分:1)
这是一个基本的R方法,它将返回所需的格式:
format(as.Date(paste0("1/",dates), "%d/%m/%Y"), "%YM%m")
[1] "2016M01" "2016M02" "2016M03" "2016M04" "2016M05" "2016M06" "2016M07" "2016M08" "2016M09"
[10] "2016M10" "2016M11" "2016M12" "2017M01"
我们的想法是先转换为Date对象,然后使用format
函数创建所需的字符表示。我粘贴在1/
上,以便每个元素都有一天。
答案 1 :(得分:0)
正如@a p o m所说,如果你正在操纵日期,寻找另一个解决方案可能会更好,但如果你想坚持使用正则表达式,你可以试试这个。
([02-9]|1[0-2]?)[:\/](\d{4})
example
答案 2 :(得分:0)
new_dates <- sub("(\\d{1,2})\\/(\\d{4})","\\2M0\\1", dates)
It's fine.