正则表达式单个数字

时间:2017-03-16 14:05:35

标签: r regex

我有一个问题,我认为这是通过在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")

3 个答案:

答案 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.