Удаление всего текста слева от определенной клавиши, которая повторяется - PullRequest
2 голосов
/ 10 июля 2019

У меня есть вектор с несколькими текстами:

 vec = c("gjljlfj <Joe", "fsdfs<sdfdsf<Mike", "David" , "dfsf<<<Don")

Я надеюсь удалить весь текст слева от LAST < (или первый, если он начинается с левой стороны текста),например, новый вектор будет выглядеть так:

 newVec = c("Joe","Mike","David","Don")

Пробовал несколько вещей, но не смог сделать это правильно.Следующим шагом будет написание функции, которая начинается с последней буквы и проверяет, является ли каждая буква < или нет, но я уверен, что есть лучшее решение (не смог найти его).

Ответы [ 3 ]

5 голосов
/ 10 июля 2019

Это можно сделать с помощью регулярного выражения:

regmatches(vec, regexpr("[^<]+$", vec))

[^<]+ соответствует «одному или нескольким символам, которые не являются« <»», а затем <code>$ соответствует концу строки.

Если у вас установлен пакет stringr, это просто:

stringr::str_extract(vec, "[^<]+$")
4 голосов
/ 10 июля 2019
sapply(strsplit(vec, "<"), function(x) tail(x, 1))
#[1] "Joe"   "Mike"  "David" "Don"

ИЛИ

substring(vec, 1 + sapply(gregexpr("<", vec), function(i) tail(i, 1)), nchar(vec))
#[1] "Joe"   "Mike"  "David" "Don"  
1 голос
/ 10 июля 2019

Мы можем использовать stri_extract_last от stringi

library(stringi)
stri_extract_last_regex(vec, "\\w+")
#[1] "Joe"   "Mike"  "David" "Don"  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...