What a strsplit function in R does is, match and delete a given regular expression to split the rest of the string into vectors.
>strsplit(\"abc123def\",
You could use lookaround assertions.
> test <- "abc123def"
> strsplit(test, "(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)", perl=T)
[[1]]
[1] "abc" "123" "def"
Fundamentally, it seems to me that what you want is not to split on [0-9]+
but to split on the transition between [0-9]+
and everything else. In your string, that transition is not pre-existing. To insert it, you could pre-process with gsub
and back-referencing:
test <- "abc123def"
strsplit( gsub("([0-9]+)","~\\1~",test), "~" )
[[1]]
[1] "abc" "123" "def"
You can use strapply from gsubfn package.
test <- "abc123def"
strapply(X=test,
pattern="([^[:digit:]]*)(\\d+)(.+)",
FUN=c,
simplify=FALSE)
[[1]]
[1] "abc" "123" "def"