Извлеките строку между n-м вхождением двух символов

#r

Вопрос:

Я редактирую беспорядочный список литературы. Я хотел бы извлечь строку между годом и следующим периодом. Оригинальный текст:

[1] «Асемоглу, Д., и Робинсон, Дж. А. (2012). Почему нации терпят неудачу: истоки власти, процветания и бедности. Книги короны».
[2] «Адам, С., и Криси, Х. (2007). Сетевой подход. В Сабатье, П. А. (ред.), Теории политического процесса (2-е изд.). Кембридж, Массачусетс: Вествью Пресс.» [3] «Адамс-Уэббер, Дж. Р. (1969). Когнитивная сложность и социальность. Британский журнал социальной и клинической психологии, 8, 211-216.»

Я хотел бы извлечь следующее:

[1] «Почему нации терпят неудачу: истоки власти, процветания и бедности».
[2] «Сетевой подход».
[3] «Когнитивная сложность и социальность».

Я использую следующий код

 str_extract(df1$References, pattern = "(?<=\).).*(?=\.)")
 

И извлеченный текст не остановился после первого»». Он возвращается:

1] » Почему нации терпят неудачу: истоки власти, процветания и бедности. Книги короны»
[2] » Сетевой подход. В Сабатье, П. А. (ред.), Теории политического процесса (2-е изд.). Кембридж, Массачусетс: Вествью Пресс»
[3] » Когнитивная сложность и социальность. Британский журнал социальной и клинической психологии, 8, 211-216″

Комментарии:

1. Добро пожаловать в Stackoverflow. Вы можете посмотреть qdapRegex , который содержит несколько подходов к цитированию (см. Примеры).

Ответ №1:

Рассмотрите возможность использования шаблона регулярного выражения, который соответствует одному или нескольким символам, которые не являются точкой ( [.] ), за которой следует a \ . и это следует за ) , . и пробел ( \s ) — завернутый в поиск регулярного выражения

 library(stringr)
library(tibble)
str_extract(df1$References, "(?<=\)\.\s)[^.] \.")
[1] "Why nations fail: The origins of power, prosperity, and poverty." "The network approach."                                           
[3] "Cognitive complexity and sociality." 
 

данные

 df1 <- structure(list(References = c("Acemoglu, D., amp; Robinson, J. A. (2012). Why nations fail: The origins of power, prosperity, and poverty. Crown Books.", 
"Adam, S., amp; Kriesi, H. (2007). The network approach. In Sabatier, P. A. (ed.), Theories of the policy process (2nd Ed.). Cambridge, MA: Westview Press.", 
"Adams-Webber, J. R. (1969). Cognitive complexity and sociality. British Journal of Social and Clinical Psychology, 8, 211-216."
)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-3L))
 

Ответ №2:

Базовый вариант R с sub . Извлеките текст, который появится после (number) , до следующей полной остановки.

 x <- c("Acemoglu, D., amp; Robinson, J. A. (2012). Why nations fail: The origins of power, prosperity, and poverty. Crown Books.", 
       "Adam, S., amp; Kriesi, H. (2007). The network approach. In Sabatier, P. A. (ed.), Theories of the policy process (2nd Ed.). Cambridge, MA: Westview Press.", 
       "Adams-Webber, J. R. (1969). Cognitive complexity and sociality. British Journal of Social and Clinical Psychology, 8, 211-216.")

sub('.*?\(\d \)\.\s*(.*?)\..*', '\1', x)

#[1] "Why nations fail: The origins of power, prosperity, and poverty"
#[2] "The network approach"                                           
#[3] "Cognitive complexity and sociality"