我正在尝试一些我认为很容易的事情.我正在寻找一个单一的正则表达式解决方案(尽管其他人欢迎完整性).我想拆分n次出现的分隔符.
这是一些数据:
- x <- "I like_to see_how_too"
- pat <- "_"
期望的结果
假设我想在第一次出现_时拆分:
- [1] "I like" "to see_how_too"
假设我想在第二次出现_时拆分:
- [1] "I like_to see" "how_too"
理想情况下,如果解决方案是正则表达式,则可以推广到第n次;该解决方案将使用strsplit与单个正则表达式.
这是一个不适合我使用strsplit的单正则表达式参数的解决方案
- x <- "I like_to see_how_too"
- y <- "_"
- n <- 1
- loc <- gregexpr("_",x)[[1]][n]
- c(substr(x,1,loc-1),substr(x,loc + 1,nchar(x)))
这是另一个使用gsubfn包和一些正则表达式的解决方案.要更改分隔符的第n个匹配项,您可以简单地交换放置在量词范围内的数字 – {n}.
- library(gsubfn)
- x <- 'I like_to see_how_too'
- strapply(x,'((?:[^_]*_){1})(.*)',c,simplify =~ sub('_$','',x))
- # [1] "I like" "to see_how_too"
如果您希望第n个匹配项是用户定义的,则可以使用以下命令:
- n <- 2
- re <- paste0('((?:[^_]*_){',n,'})(.*)')
- strapply(x,re,x))
- # [1] "I like_to see" "how_too"