2013-07-15 18 views
18

Jaki jest najbardziej elegancki sposób na wyodrębnienie ostatniego słowa w ciągu zdań?Wyodrębnij ostatnie słowo w ciągu znaków w R

Wyrok nie kończy się na "." Słowa są oddzielone spacjami.

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

powinien powrócić: „FOX”

nie chcę użyć pakietu jeśli proste rozwiązanie jest możliwe. Jeśli istnieje proste rozwiązanie oparte na pakiecie, jest to również w porządku.

+1

Podaj nam szczegóły dotyczące struktury danych, w przeciwnym razie po prostu przeszyjemy cię w ciemności, próbując ci pomóc. – A5C1D2H2I1M1N2O1R2T1

+1

Co próbowaliście? Mogę sobie wyobrazić, że możesz po prostu odwrócić ciąg i oddzielić go od '' ". –

+1

Powiązane: http://stackoverflow.com/questions/13093931/r-remove-last-word-from-string –

Odpowiedz

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

Zasadniczo jak sugeruje @ Señor O.

+0

Ciężko mi nazwać metodę za pomocą '[[eleganckiego :) ale to może być moje osobiste odczucie na listach R –

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

Spowoduje to przechwycenie ostatniego ciągu cyfr i znaków przed zakończeniem łańcucha.

Można również użyć funkcji regexec i regmatches, ale uważam sub czystsze:

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

Zobacz ?regex i ?sub aby uzyskać więcej informacji.

+0

Powiedziałbym, że rozwiązanie Rolanda dla tego konkretnego problemu jest znacznie prostsze, ale twój kod zapewnia dobry szablon do robienia wszelkiego rodzaju ukierunkowane ekstrakcje. –

+0

jeśli chcesz skrócić składnię, możesz pominąć '^' ("sub" rozpocznie się na samym początku) i zastąpić '[[: alnum:]]' z '\\ w' – eddi

+0

@eddi Dobra uwaga. Jednak lubię być tak klarowny, jak to możliwe, używając wyrażeń regularnych i uogólniać tylko te przypadki, za którymi tęsknię, zamiast próbować znaleźć przypadki, w których dorównałem. – Justin

5

Idąc w kierunku paczki, jest to najprostsza odpowiedź mogę myśleć:

library(stringr) 

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

Tylko dla kompletności: Biblioteka stringr zawiera funkcja dla dokładnie tego problemu.

library(stringr) 

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

Innym rozwiązaniem jest pakowany stri_extract_last_words() pakiecie

library(stringi) 

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

Funkcja stringi usuwa również wszelkie znaki interpunkcyjne, które mogą znajdować się na końcu zdania.

stri_extract_last_words("The quick brown fox? ...") 
# [1] "fox" 
Powiązane problemy