strsplit:从整数中拆分字符串

strsplit:从整数中拆分字符串,r,R,我目前正在编写一个代码,使用strsplit将字母和整数分开,这是我的考试练习/学习课程之一(在这个问题上没有评分,我还不能掌握这个概念) 我试过: unlist(strsplit(s, "(?<=[a-zA-Z])(?=[0-9])")) 但这给了我一个char的向量,本质上并没有把字母和整数分开 例如,与“w17u2”变成“w”,“1”,“7”,“u”,“2”不同,我需要它是“w”,“17”,“u”,,“2” 输入没有任何特定的模式,因此必须能够在任何模式下将字母与整数分开。一个选项

我目前正在编写一个代码,使用strsplit将字母和整数分开,这是我的考试练习/学习课程之一(在这个问题上没有评分,我还不能掌握这个概念)

我试过:

unlist(strsplit(s, "(?<=[a-zA-Z])(?=[0-9])"))
但这给了我一个char的向量,本质上并没有把字母和整数分开

例如,与
“w17u2”
变成
“w”
“1”
“7”
“u”
“2”
不同,我需要它是
“w”
“17”
“u”
“2”


输入没有任何特定的模式,因此必须能够在任何模式下将字母与整数分开。

一个选项是使用look aheads/look behinds

ss <- "w17u2"

unlist(strsplit(ss, "((?<=[a-z])(?![a-z])|(?<=\\d)(?!\\d))", perl = T))
#[1] "w"  "17" "u"  "2"

ss您也可以使用strsplit两次,比如:

splitnums <- function(s) {
  v1 <- strsplit(s, '\\d+')[[1]] # "aa" "ss" "d"  "f"
  v2 <- strsplit(s, '\\D+')[[1]] # ""   "2"  "3"  "22" "5" 
  if (v1[1] == "") return(c(rbind(v2, v1[2:length(v1)])))
  else return(c(rbind(v1, v2[2:length(v2)])))
}

splitnums('aa2ss3d22f5')
# [1] "aa" "2"  "ss" "3"  "d"  "22" "f"  "5" 
splitnums
splitnums <- function(s) {
  v1 <- strsplit(s, '\\d+')[[1]] # "aa" "ss" "d"  "f"
  v2 <- strsplit(s, '\\D+')[[1]] # ""   "2"  "3"  "22" "5" 
  if (v1[1] == "") return(c(rbind(v2, v1[2:length(v1)])))
  else return(c(rbind(v1, v2[2:length(v2)])))
}

splitnums('aa2ss3d22f5')
# [1] "aa" "2"  "ss" "3"  "d"  "22" "f"  "5"