2017-01-05 2 views
-2

У меня есть строка, как показано нижеКак извлечь подстроку в R

x <- "Supplier will initially respond to High Priority incidents. Supplier will subsequently update EY every 60 minutes or at an interval EY specifies. Reporting and Response times will be capture in ServiceNow which, save in respect of manifest error, will be conclusive proof of the time period taken." 

Я хочу извлечь 2 слова после слова «каждый».

Как это можно достичь в R?

+0

Это, вероятно, потому, что вы показали, 0-усилие и задать вопрос 'дайте мне code'. Пожалуйста, прочитайте [ask] и [mcve]. – xenteros

ответ

3

Мы можем использовать str_extract с помощью регулярных выражений обходной путь ((?<=every\\s)), а затем два слова

library(stringr) #corrected the package here 
unlist(str_extract_all(x, "(?<=every\\s)(\\w+\\s+\\w+)")) 
#[1] "60 minutes" 

Или с помощью base R

regmatches(x, gregexpr("(?<=every\\s)(\\w+\\s+\\w+)", x, perl = TRUE))[[1]] 
#[1] "60 minutes" 
+1

akrun, правильный пакет 'stringr' не' stringi' –

+0

@akrun - спасибо за ответ. Не могли бы вы сообщить мне, как изменить команду unlist в stringr так, чтобы результат был «каждые 30 секунд». – Arun

+1

попробуйте эту 'paste (" every ", unlist (str_extract_all (x," (? <= Every \\ s) (\\ w + \\ s + \\ w +) ")), sep =" ")' –

2

что-то подобное в базовом R,

Разделение каждого слова строки и n найти индекс появления слова every, а затем выбрать следующие два слова из этого индекса.

wordsplit <- unlist(strsplit(x, " ", fixed = TRUE)) 
indx <- grep("\\bevery\\b", wordsplit) 
wordsplit[(indx+1):(indx +2)] 
#[1] "60"  "minutes" 

Или, как @DavidArenburg предложил мы можем также использовать match вместо grep

wordsplit[match("every", wordsplit) + 1:2] 
Смежные вопросы