Извлечь 2 термина перед конкретным символом

Я хочу извлечь два слова, предшествующие Twitter @handle

x <- c("this is a @handle", "My name is @handle", "this string has @more than one @handle")

Выполнение следующего извлекает весь текст, предшествующий последнему только @handle, мне это нужно для всех @handle

(ext <- stringr::str_extract_all(x, "^.*@"))
[[1]]
[1] "this is a @"

[[2]]
[1] "My name is @"

[[3]]
[1] "this string has @more than one @"

person JohnCoene    schedule 16.10.2016    source источник
comment
вы, вероятно, хотите str_split   -  person shayaa    schedule 16.10.2016


Ответы (1)


Вы можете использовать квантификатор {2}, чтобы указать, сколько слов вы хотите извлечь перед символом @. Слово состоит из символов слова \\w+ и границы слова, которая в вашем случае будет пробелом. И мы можем использовать функцию trimws для удаления ненужных начальных и конечных пробелов:

library(stringr)
lapply(str_extract_all(x, "(\\w+\\s+){2}(?=@)"), trimws)

#[[1]]
#[1] "is a"

#[[2]]
#[1] "name is"

#[[3]]
#[1] "string has" "than one"
person Psidom    schedule 16.10.2016