Как извлечь текстовые данные между числами и точкой с запятой в R? - PullRequest
0 голосов
/ 28 мая 2020

Я хочу извлечь текст между числами, начинающимися с 19 или 20 и точки с запятой.

abc 1993 def ghi; klm
cba 2012 kff kkk; zzz
xxx 1999 ggg yyy; vvv
cgc 2015 tet mmm; bbb

Ожидаемый результат:

93 def ghi
12 kff kkk
99 ggg yyy
15 tet mmm

Ответы [ 2 ]

1 голос
/ 28 мая 2020

В базе R мы можем использовать sub с группой без захвата для 19 и 20 и извлекать все после этого, пока не встретится точка с запятой.

sub('.*(?:19|20)(.*);.*', '\\1', string)
#[1] "93 def ghi" "12 kff kkk" "99 ggg yyy" "15 tet mmm"

Использование того же регулярного выражения в str_match:

stringr::str_match(string, '(?:19|20)(.*);')[, 2]
1 голос
/ 28 мая 2020

Мы можем использовать sub в базе R для захвата символов, которые идут после 19 или 20 и ;, и заменить их обратной ссылкой (\\1) захваченной группы

trimws(sub(".*\\b(19|20)([^;]+);.*", "\\2", str1))
#[1] "93 def ghi" "12 kff kkk" "99 ggg yyy" "15 tet mmm"

Или используя trimws и whitespace

trimws(str1, whitespace = '.*(19|20)|;.*')
#[1] "93 def ghi" "12 kff kkk" "99 ggg yyy" "15 tet mmm"

Или с str_extract

library(stringr)
trimws(str_extract(str1, "(?<=\\b(19|20))[^;]+"))
#[1] "93 def ghi" "12 kff kkk" "99 ggg yyy" "15 tet mmm"

data

str1 <- c("abc 1993 def ghi; klm", "cba 2012 kff kkk; zzz", "xxx 1999 ggg yyy; vvv", 
"cgc 2015 tet mmm; bbb")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...