2013-07-15 78 views
18

提取句子字符串中最后一个单词的最优雅方式是什么?提取字符串中的最后一个单词R

句子不以“。”结尾。 单词由空白分隔。

sentence <- "The quick brown fox" 
TheFunction(sentence) 

应该返回:“狐狸”

我不想使用包,如果一个简单的解决方案是可能的。 如果存在一个基于软件包的简单解决方案,那也很好。

+1

给我们提供一些关于你的数据结构的细节,否则,我们只是在试图帮助你时在暗处刺痛。 – A5C1D2H2I1M1N2O1R2T1

+1

你有什么尝试?我想你可以扭转字符串并用'“”分开。 –

+1

相关:http://stackoverflow.com/questions/13093931/r-remove-last-word-from-string –

回答

17
tail(strsplit('this is a sentence',split=" ")[[1]],1) 

基本上由@阅兵式O.

+0

我很难用'[['雅致:)'来调用方法,但这可能是我个人对R列表的感觉 –

10
x <- 'The quick brown fox' 
sub('^.* ([[:alnum:]]+)$', '\\1', x) 

这将在字符串结束之前捕获最后一串数字和字符。

您还可以使用regexecregmatches功能,但我发现sub清洁:

m <- regexec('^.* ([[:alnum:]]+)$', x) 
regmatches(x, m) 

更多信息,请参见?regex?sub

+0

我想说罗兰的这个具体问题的解决方案要简单得多,但是你的代码提供了一个很好的模板各种有针对性的提取。 –

+0

如果你想让语法更短,你可以省略'^'('sub'将从头开始)并用'\\ w'替换'[[:alnum:]]'' – eddi

+0

@eddi好点。然而,我喜欢尽可能地使用正则表达式来明确,只是因为我发现我错过的情况而不是泛泛地寻找我已经过度匹配的情况。 – Justin

5

要在包装上的建议,这是我能想到的最简单的答案:

library(stringr) 

x <- 'The quick brown fox' 
str_extract(x, '\\w+$') 
#[1] "fox" 
27

只是为了完整性:库stringr包含正是这个问题的一个函数。

library(stringr) 

sentence <- "The quick brown fox" 
word(sentence,-1) 
[1] "fox" 
10

另一个包装的选择是从stringi

library(stringi) 

stri_extract_last_words("The quick brown fox") 
# [1] "fox" 

功能stri_extract_last_words()还除去可能在句子的结尾任何标点符号。

stri_extract_last_words("The quick brown fox? ...") 
# [1] "fox" 
相关问题