Извлечь строку между первым и последним _ - PullRequest
0 голосов
/ 04 декабря 2018

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

Test <- as.data.frame(c("A_YES_X","A_Yes_YES_X"))
colnames(Test)[1] <- "test"

Так что в приведенном выше примере это будет вывод, который мне понадобится.

Test$Output <- c("YES","Yes_YES")

Спасибо заранее

Ответы [ 3 ]

0 голосов
/ 05 декабря 2018

Вы можете найти часть вашей строки, которая является всем перед первым _ (включая его), используя ^[^_]*_, и часть после последнего _ (включая его), используя _[^_]*$.Вы можете удалить их, используя gsub:

gsub("_[^_]*$|^[^_]*_","",test,perl=T)
[1] "YES"     "Yes_YES"
0 голосов
/ 05 декабря 2018

Или с извлечением только захваченного шаблона "один или несколько символов (. +) Между первым и последним _ (хорошо объяснено @Lamia).

library(stringr)
x <- c("A_YES_X","A_Yes_YES_X")
str_match(x,"^[^_]*_(.+)_[^_]*$")[,2]
0 голосов
/ 05 декабря 2018

Попробуйте

x <- c("A_YES_X","A_Yes_YES_X")
stringi::stri_extract(x, regex = '(?<=_).*(?=_)')
#[1] "YES"     "Yes_YES"
...