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