Как мне разделить и сохранить элементы с помощью strsplit?

Что такое функция strsplit в R, соответствует и удаляет данное регулярное выражение, чтобы разделить остальную часть строки на векторы.

>strsplit("abc123def", "[0-9]+")
[[1]]
[1] "abc" ""    ""    "def" 

Но как мне разделить строку таким же образом, используя регулярное выражение, но также сохранить совпадения? Мне нужно что-то вроде следующего.

>FUNCTION("abc123def", "[0-9]+")
[[1]]
[1] "abc" "123" "def" 

Использование linkply ( "abc123def", "[0-9] + | [az] +" ) работает здесь, но что, если остальная часть строки, отличная от совпадений, не может быть захвачена регулярным выражением?

Ответы

Ответ 1

По сути, мне кажется, что вы хотите не разделить на [0-9]+, а разделить на переход между [0-9]+ и всем остальным. В вашей строке этот переход не существует. Чтобы вставить его, вы можете предварительно обработать gsub и обратную ссылку:

test <- "abc123def"
strsplit( gsub("([0-9]+)","~\\1~",test), "~" )

[[1]]
[1] "abc" "123" "def"

Ответ 2

Вы можете использовать утверждения поиска.

> test <- "abc123def"
> strsplit(test, "(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)", perl=T)
[[1]]
[1] "abc" "123" "def"

Ответ 3

Вы можете использовать ленту из пакета gsubfn.

test <- "abc123def"
strapply(X=test,
         pattern="([^[:digit:]]*)(\\d+)(.+)",
         FUN=c,
         simplify=FALSE)

[[1]]
[1] "abc" "123" "def"