У меня есть вектор таких строк символов x = c("ABC", "ABC, EF", "ABC, DEF, 2 stems", "DE, other comments, and stuff")
.
Я хотел бы разделить каждый из них на два компонента: 1) набор заглавных букв (2 или 3 буквы, разделенные запятыми) и 2) все, что после последнего "[A-Z][A-Z], ".
Результаты должны быть
[[1]]
[1] "ABC"
[[2]]
[1] "ABC, EF"
[[3]]
[1] "ABC, DEF" "2 stems"
[[4]]
[1] "DE" "other comments, and stuff"
Я попробовал strsplit(x, "[A-Z][A-Z], [a-z0-9]")
и strsplit(x, "(?:[A-Z][A-Z], )[a-z0-9]")
, оба вернулись
[[1]]
[1] "ABC"
[[2]]
[1] "ABC, EF"
[[3]]
[1] "ABC, D" " stems"
[[4]]
[1] "" "ther comments, and stuff"
Идентификация места разделения зависит от комбинации конца первой подстроки и начала второй подстроки, поэтому эти части исключаются из окончательного результата.
Приветствуется любая помощь в разделении, как указано выше, при включении соответствующих частей регулярного выражения разделения в каждую подстроку!
Один из вариантов будет str_split
library(stringr)
str_split(x, ", (?=[a-z0-9])", n = 2)
#[[1]]
#[1] "ABC"
#[[2]]
#[1] "ABC, EF"
#[[3]]
#[1] "ABC, DEF" "2 stems"
#[[4]]
#[1] "DE" "other comments, and stuff"