使用str_extract_all只提取R中的前两个单词?

时间:2017-06-22 03:27:48

标签: r regex vector subset

我遇到了一个应该很简单的问题。可能是一个正则表达式问题。我是新手。请考虑一个字符串向量,例如:

species_location<-c('Homo_sapiens_Lausanne_Switzerland', 'Solenopsis_invicta_California_US', 'Rattus_novaborensis_Copenhagen_Denmark', 'Candida_albicans_Crotch_Home')

我想最终得到一个看起来像物种的新载体:

c(Homo_sapiens, Solenopsis_invicta, Rattus_novaborensis, Candida_albicans)

目前我正在使用以下功能:

str_extract_all(species_location,'^(\\S+?)_(\\S+?)_')

然而,它返回前3个单词而不是我为它设计的单词。我无法弄清楚为什么。请任何人帮忙解释一下吗?感谢

更新: 对于路过的人来说,上面输入的代码可以正常工作,除了我的R OS for Mac OS 3.0.0,R.app 1.60。我仍然不知道那里有什么问题,但可能有兴趣让别人检查。将尝试在这里添加图片。 Unusual interpretation of regex

2 个答案:

答案 0 :(得分:5)

只需依赖stringr包。

library(stringr)

species_location<-c('Homo_sapiens_Lausanne_Switzerland', 'Solenopsis_invicta_California_US', 'Rattus_novaborensis_Copenhagen_Denmark', 'Candida_albicans_Crotch_Home')

word(species_location, 1,2, sep="_")

答案 1 :(得分:2)

我们可以使用str_extract

str_extract(species_location, "[^_]+_[^_]+")