stringr: как восстановить предложения из строки, полученной в результате объединения этих предложений - PullRequest
1 голос
/ 24 января 2020

У меня есть три строки, каждая из которых содержит запятые (","). Каждая единичная строка также начинается с заглавной буквы. Эти строки были объединены способом paste0 () таким образом, что запятая (",") и пробелы не разделяют исходные строки модуля.

Я предоставляю код R ниже, чтобы дать больше контекста к моему вопросу:

string1 <- "I like dogs, cats, and pigs"
string2 <- "Community health centers, businesses, stores"
string3 <- "Jamie Foxx sings, dances, and acts"
string_combined <- paste0(string1,",",string2,",",string3)
string_combined
[1] "I like dogs, cats, and pigs,Community health centers, businesses, stores,Jamie Foxx sings, dances, and acts"

Как видно из вывода консоли выше, строки встречаются на стыке:

  1. последняя строчная буква первой строки
  2. запятая
  3. первая заглавная буква 2-й строки
  4. без пробелов на стыке единичных строк

Я использовал str_view_all(string = string_combined,pattern = ",\\S"), чтобы определить, где соединяются строки, но я не уверен, как восстановить исходные строки модулей (string1, string2, string3).

Вопрос: Как можно восстановить исходные строки модулей из более крупной строки (string_combined), которая представляет собой конкатенацию строк модулей, признавая, что исходные строки модулей, которые сами содержат запятые, разделяются запятые в объединенной строке.

Возможно, кто-то сможет помочь ответить на мой вопрос. Спасибо.

Ответы [ 2 ]

2 голосов
/ 24 января 2020

Вы можете использовать шаблон, описанный выше в strsplit

strsplit(string_combined, "(?<=[a-z]),(?=[A-Z])",perl = TRUE)[[1]]

#[1] "I like dogs, cats, and pigs"   "Community health centers, businesses, stores"
#[3] "Jamie Foxx sings, dances, and acts"   

и аналогично с stringr::str_split

stringr::str_split(string_combined, "(?<=[a-z]),(?=[A-Z])")[[1]] 

Это разбивает строку на строчную букву (a-z ), за которыми следует запятая (,), за которой следует заглавная буква (A-Z).

1 голос
/ 24 января 2020

Должно работать следующее:

str_split(string_combined, ',(?=[[:upper:]])')

Часть регулярного выражения (?=[[:upper:]]) относится к шаблону, за которым следует последний в верхнем регистре, и разделяется на запятая (,). Вместе он находит запятую, за которой следует заглавная буква, и разделяет запятую.

...