Как разделить строку в R с помощью регулярного выражения, когда части регулярного выражения должны быть сохранены в последующих разделенных строках? - PullRequest
1 голос
/ 07 апреля 2019

У меня есть такой вектор символьных строк x = c("ABC", "ABC, EF", "ABC, DEF, 2 stems", "DE, other comments, and stuff").

Я бы хотел разделить каждый из них на две составляющие: 1) набор заглавных букв (2 или 3 буквы, разделенных запятыми), и 2) все после последней "[AZ] [AZ]," .

Результат должен быть

 [[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"

Определение места разделения зависит от комбинации конца первой подстроки и начала второй подстроки, поэтому эти части исключаются из конечного результата.

Любая помощь, которая ценится при расщеплении, как указано выше, при включении соответствующих частей регулярного выражения в каждую подстроку!

1 Ответ

1 голос
/ 07 апреля 2019

Один вариант будет 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"
...