Как мне разделить и сохранить элементы с помощью 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"