R - gsub (): проблема при попытке извлечь строку между "." И "_" - PullRequest
0 голосов
/ 01 октября 2019

Синтаксис R gsub () очень сложен для меня! Не могли бы вы, пожалуйста, помочь мне извлечь, например, "DA VINCI" из "16. DA VINCI_RETOUR"?

Я уже пробовал gsub("_.+$", "", x), но он просто удаляет то, что после "_"и я хотел бы также удалить то, что стоит перед "."!

Большое спасибо за вашу помощь!

Ответы [ 3 ]

3 голосов
/ 01 октября 2019

.* принимает все в начале, \\. соответствует ., (. *) Соответствует всему, пока не сохранит его в \\1 _, а .* удалит все остальное.

x  <- "16. DA VINCI_RETOUR"
sub(".*\\. (.*)_.*", "\\1", x)
#[1] "DA VINCI"

x  <- "7. TILLEUL_RETOUR"
sub(".*\\. (.*)_.*", "\\1", x)
#[1] "TILLEUL"
2 голосов
/ 01 октября 2019

Вот один вариант с группой захвата, чтобы соответствовать шаблону слова (\\w+), за которым следует пробел и другое слово в качестве группы, и заменить на обратную ссылку группы захвата (\\1)

sub("^\\d+\\.\\s+(\\w+\\s+\\w+)_.*", "\\1", str1)

данные

str1 <- "16. DA VINCI_RETOUR" 
1 голос
/ 01 октября 2019

Альтернатива, которая использует strsplit:

gsub("\\d+\\.\\s","",
      strsplit(the_string,"_")[[1]][1])
[1] "DA VINCI"

Данные:

the_string <- "16. DA VINCI_RETOUR"
...