正则表达式 – 在最后一个字符旁边分割字符串

前端之家收集整理的这篇文章主要介绍了正则表达式 – 在最后一个字符旁边分割字符串前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个数字变量DATE,表示最后两个字符为MONTH且前一个或两个字符为DAY的日期.我想将列拆分为MONTH和DAY的单独列.

我可以使用以下R代码执行此操作.虽然我希望有一个更简单的正则表达式解决方案.

my.data <- read.table(text = '
     ID     DATE     VARX
    A111     104        0
    A111     204        1
    A111    1004        4
    A111    2004        4
    B111    3004        2
    C111    3004        3
    C111     105        4
    C111    1005        4
',header = TRUE,stringsAsFactors = FALSE)

# remove the last two characters of a string
my.data$DAY   <- ifelse(nchar(my.data$DATE) == 3,substr(my.data$DATE,nchar(my.data$DATE) - (nchar(my.data$DATE)-1),nchar(my.data$DATE) - (nchar(my.data$DATE)-1)),nchar(my.data$DATE) - (nchar(my.data$DATE)-2)))

# keep the last two characters of a string

my.data$MONTH <- substr(my.data$DATE,(nchar(my.data$DATE)-1),nchar(my.data$DATE))

    ID DATE VARX DAY MONTH
1 A111  104    0   1    04
2 A111  204    1   2    04
3 A111 1004    4  10    04
4 A111 2004    4  20    04
5 B111 3004    2  30    04
6 C111 3004    3  30    04
7 C111  105    4   1    05
8 C111 1005    4  10    05

谢谢你的任何建议.

解决方法

要使用正则表达式,您可以尝试:

dat <- c(104,204,1004,2004,3004,105,1005)


day <- gsub("(.*?)(..)","\\1",dat)
day

[1] "1"  "2"  "10" "20" "30" "30" "1"  "10"

mth <- gsub("(.*?)(..)","\\2",dat)
mth

[1] "04" "04" "04" "04" "04" "04" "05" "05"

您还可以尝试sprintf和substr的组合.

在这里,我将这些包装成一个函数,给出你的答案:

foo <- function(x){
  dat <- sprintf("%04d",x)
  cbind(day=substr(dat,1,2),month=substr(dat,3,4))
}

foo(dat)

foo(dat)
     day  month
[1,] "01" "04" 
[2,] "02" "04" 
[3,] "10" "04" 
[4,] "20" "04" 
[5,] "30" "04" 
[6,] "30" "04" 
[7,] "01" "05" 
[8,] "10" "05"

猜你在找的正则表达式相关文章