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

问题描述:

我遇到了一个应该很简单的问题。可能是正则表达式问题。我是一个新手。请考虑一个字符串矢量,如一个:使用str_extract_all只提取R中的前两个单词?

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+?)_') 

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

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

+2

我无法重现此,运行您的示例代码,我得到每个项目(后跟一个尾部'_')的前两个单词。你确定你的示例代码与你正在运行的代码匹配吗? – Marius

+0

如果你想成为积极的人,你就不会发疯 - 并且怀疑你的懒惰修饰符可能会出现某种魔法,那么试试这个:'^([a-zA-Z] +)_([a -zA-Z] +)_' – Addison

+0

这很奇怪!在我这边,它每次都会返回前三个字,我已经尝试了很多小的修改(例如使用{2})! – Scientist

只依靠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="_") 
+0

最后显然有一些R版本的行为问题,请参阅上文。尽管如此,我仍然认为你是最好的解决方案,因为代码非常干净,以后我会更容易理解。 – Scientist

我们可以使用str_extract

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