首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R以使用stringr::str_extract g

R以使用stringr::str_extract g
EN

Stack Overflow用户
提问于 2021-07-12 05:49:59
回答 3查看 44关注 0票数 0

我在向量中有一个字符串,如下所示:

代码语言:javascript
复制
l <- c("0_Mango_10a"  "0_Orange_10b"  "0_Apple_11)

我需要提取Mango_10a、Orange_10b和Apple_11

我当前的代码是:

代码语言:javascript
复制
stringr::str_extract(l, "(?<=_)[:alnum:]+")

我买了芒果,橙子和苹果。

有人能帮我得到想要的结果吗?

提前感谢!

EN

回答 3

Stack Overflow用户

发布于 2021-07-12 05:51:03

只需在base R中使用trimws,方法是将whitespace指定为一个或多个数字(\\d+),后跟下划线(_)

代码语言:javascript
复制
trimws(l, whitespace = "\\d+_")
[1] "Mango_10a"  "Orange_10b" "Apple_11"  

通过stringr,可以使用str_remove

代码语言:javascript
复制
stringr::str_remove(l, "^\\d+_")
[1] "Mango_10a"  "Orange_10b" "Apple_11"  

str_extract中,指定的模式只能与字母数字匹配,而不能与_匹配。如果我们包含,它将会工作

代码语言:javascript
复制
stringr::str_extract(l, "(?<=_)[[:alnum:]_]+")
[1] "Mango_10a"  "Orange_10b" "Apple_11"  
票数 4
EN

Stack Overflow用户

发布于 2021-07-12 05:56:41

这里有两个基本的R选项

代码语言:javascript
复制
> gsub("^\\d+_", "", l)
[1] "Mango_10a"  "Orange_10b" "Apple_11"

> unlist(regmatches(l, gregexpr("(?<=_).*", l, perl = TRUE)))
[1] "Mango_10a"  "Orange_10b" "Apple_11"
票数 1
EN

Stack Overflow用户

发布于 2021-07-12 09:49:59

您可以删除第一个下划线之前的文本。

在base R中使用sub

代码语言:javascript
复制
l <- c("0_Mango_10a" , "0_Orange_10b",  "0_Apple_11")

sub('.*?_', '', l)
#[1] "Mango_10a"  "Orange_10b" "Apple_11" 

或者stringr::str_remove

代码语言:javascript
复制
stringr::str_remove(l, '.*?_')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68340141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档