我有一个带有一些文本的向量:
vec = c("gjljlfj <Joe", "fsdfs<sdfdsf<Mike", "David" , "dfsf<<<Don")
我希望删除LAST <
左侧的所有文本(如果从文本左侧开始,则删除第一个文本),例如新矢量将如下所示:
newVec = c("Joe","Mike","David","Don")
尝试了一些事情,但做对了。下一步将是编写从最后一个字母开始的函数,并检查每个字母是否为<
,但我确信有更好的解决方案(找不到)。
答案 0 :(得分:5)
这可以用正则表达式完成:
regmatches(vec, regexpr("[^<]+$", vec))
[^<]+
匹配“不是'<'的一个或多个字符”,然后$
匹配字符串的结尾。
如果您安装了stringr
软件包,则只是:
stringr::str_extract(vec, "[^<]+$")
答案 1 :(得分:4)
sapply(strsplit(vec, "<"), function(x) tail(x, 1))
#[1] "Joe" "Mike" "David" "Don"
OR
substring(vec, 1 + sapply(gregexpr("<", vec), function(i) tail(i, 1)), nchar(vec))
#[1] "Joe" "Mike" "David" "Don"
答案 2 :(得分:1)
我们可以使用stri_extract_last
中的stringi
library(stringi)
stri_extract_last_regex(vec, "\\w+")
#[1] "Joe" "Mike" "David" "Don"