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