删除某个重复的键的所有文本

时间:2019-07-09 23:10:59

标签: r regex string

我有一个带有一些文本的向量:

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

我希望删除LAST <左侧的所有文本(如果从文本左侧开始,则删除第一个文本),例如新矢量将如下所示:

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

尝试了一些事情,但做对了。下一步将是编写从最后一个字母开始的函数,并检查每个字母是否为<,但我确信有更好的解决方案(找不到)。

3 个答案:

答案 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"