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

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

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

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

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

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

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

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

r
1
Tiangeng Lu 10 Окт 2021 в 04:55

2 ответа

Лучший ответ

Рассмотрите возможность использования шаблона регулярного выражения, который соответствует одному или нескольким символам, не являющимся точкой ([.]+), за которыми следует \\. и это следует за ), . и пробелом (\\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., & Robinson, J. A. (2012). Why nations fail: The origins of power, prosperity, and poverty. Crown Books.", 
"Adam, S., & 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))
0
akrun 10 Окт 2021 в 01:59

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

x <- c("Acemoglu, D., & Robinson, J. A. (2012). Why nations fail: The origins of power, prosperity, and poverty. Crown Books.", 
       "Adam, S., & 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" 
0
Ronak Shah 10 Окт 2021 в 03:02