我在向量中有一个字符串,如下所示:
l <- c("0_Mango_10a" "0_Orange_10b" "0_Apple_11)我需要提取Mango_10a、Orange_10b和Apple_11
我当前的代码是:
stringr::str_extract(l, "(?<=_)[:alnum:]+")我买了芒果,橙子和苹果。
有人能帮我得到想要的结果吗?
提前感谢!
发布于 2021-07-12 05:51:03
只需在base R中使用trimws,方法是将whitespace指定为一个或多个数字(\\d+),后跟下划线(_)
trimws(l, whitespace = "\\d+_")
[1] "Mango_10a" "Orange_10b" "Apple_11" 通过stringr,可以使用str_remove
stringr::str_remove(l, "^\\d+_")
[1] "Mango_10a" "Orange_10b" "Apple_11" 在str_extract中,指定的模式只能与字母数字匹配,而不能与_匹配。如果我们包含,它将会工作
stringr::str_extract(l, "(?<=_)[[:alnum:]_]+")
[1] "Mango_10a" "Orange_10b" "Apple_11" 发布于 2021-07-12 05:56:41
这里有两个基本的R选项
> gsub("^\\d+_", "", l)
[1] "Mango_10a" "Orange_10b" "Apple_11"
> unlist(regmatches(l, gregexpr("(?<=_).*", l, perl = TRUE)))
[1] "Mango_10a" "Orange_10b" "Apple_11"发布于 2021-07-12 09:49:59
您可以删除第一个下划线之前的文本。
在base R中使用sub
l <- c("0_Mango_10a" , "0_Orange_10b", "0_Apple_11")
sub('.*?_', '', l)
#[1] "Mango_10a" "Orange_10b" "Apple_11" 或者stringr::str_remove。
stringr::str_remove(l, '.*?_')https://stackoverflow.com/questions/68340141
复制相似问题