2013-07-15 65 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" 
相關問題