удалить все после первого появления регулярного выражения gsub R - PullRequest
1 голос
/ 14 марта 2019

Это может быть очень легко, но я все еще не могу найти ответ.Я хотел бы удалить все перед первым "que" в моей строке:

Что я делаю:

v <- c("blabla que 1", "blabla que eu Boqueirão que ")
gsub(".*que", "", v)
# [1] " 1"   "irão"

То, что я хочу, это "1" e "eu Boqueirão que".Когда я пытаюсь .*^que, это дает какой-то эффект.Спасибо за вашу помощь.

Ответы [ 3 ]

3 голосов
/ 14 марта 2019

Чтобы удалить все вплоть до первого вхождения шаблона, используйте

sub(".*?que", "", v)
[1] " 1"                 " eu Boqueirao que "

Если вам также необходимо удалить любые пробелы 0+ после использования

sub(".*?que\\s*", "", v, perl=TRUE)
## => [1] "1"                 "eu Boqueirao que "

Обратите внимание, что perl=TRUE здесь важно, так как регулярное выражение .*?que\s* TRE отключает жадность с помощью первого не жадного квантификатора *? на текущем уровне, а \s* действует как не жадный шаблон и не жадный шаблон в концерегулярное выражение никогда не совпадает ни с одной строкой.

БОНУС : на всякий случай, если вы хотите удалить весь текст до первого вхождения шаблона , исключая этот шаблон , оберните детальвам необходимо сохранить скобки и использовать \1 в шаблоне замены:

sub(".*?(que)", "\\1", v)
## => [1] "que 1"                 "que eu Boqueirao que "
2 голосов
/ 14 марта 2019

Следуя ответу Джета, вы также можете использовать stringr::extract

v <- c("blabla que 1", "blabla que eu Boqueirão que ")
stringr::str_extract(v, '(?<=que ).+')

Выход

[1] "1"                 "eu Boqueirão que "

Чтобы прокомментировать ответ Wiktor S, вы хотите sub вместо gsub, поскольку sub заменяет первый экземпляр, но gsub находит все или глобально заменяет

1 голос
/ 14 марта 2019

Вы можете использовать stringr::str_match

v <- c("blabla que 1", "blabla que eu Boqueirão que ")
stringr::str_match(v, 'que(.*)')[,2]

Выход:

[1] " 1"                 " eu Boqueirão que "
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...