2013-07-15 12 views
18

Was ist die eleganteste Möglichkeit, das letzte Wort in einer Satzzeichenfolge zu extrahieren?Letztes Wort in Zeichenfolge extrahieren in R

Der Satz endet nicht mit einem "." Wörter sind durch Leerzeichen getrennt.

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

zurückkehren sollte: „Fuchs“

Ich will nicht, um ein Paket verwenden, wenn eine einfache Lösung möglich ist. Wenn eine einfache Lösung basierend auf einem Paket existiert, ist das auch in Ordnung.

+1

Geben Sie uns einige Details über Ihre Datenstruktur, sonst stochern wir alle im Dunkeln, während Sie versuchen, Ihnen zu helfen. – A5C1D2H2I1M1N2O1R2T1

+1

Was hast du probiert? Ich könnte mir vorstellen, dass man die Saite einfach umkehren und durch "" "trennen kann. –

+1

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

Antwort

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

Grundsätzlich wie von @ Señor O.

+0

Es ist schwer für mich, eine Methode mit '[[' elegant :) aufzurufen, aber das könnte mein persönliches Gefühl für Rs Listen sein –

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

, dass die letzte Reihe von Zahlen und Zeichen fangen, bevor dann der Zeichenfolge beenden.

Sie können auch die regexec und regmatches Funktionen verwenden, aber ich finde sub Reiniger:

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

Siehe ?regex und ?sub für weitere Informationen.

+0

Ich würde sagen, Rolands Lösung für dieses spezielle Problem ist viel einfacher, aber Ihr Code bietet eine gute Vorlage dafür alle möglichen gezielten Extraktionen. –

+0

Wenn Sie möchten, dass die Syntax noch kürzer wird, können Sie '^' weglassen ('sub' beginnt am Anfang von selbst) und ersetzt' [[: alnum:]] 'mit' \\ w' – eddi

+0

@eddi Guter Punkt. Ich möchte jedoch so explizit wie möglich mit regulären Ausdrücken sein und generalisieren nur, wenn ich Fälle verpasse, die ich vermisse, anstatt zu versuchen, Fälle zu finden, in denen ich übertroffen habe. – Justin

5

in der Verpackung Richtung gehen, ist dies die einfachste Antwort, die ich denken kann:

library(stringr) 

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

Nur der Vollständigkeit halber: Die Bibliothek enthält stringr eine Funktion für genau dieses Problem.

library(stringr) 

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

Eine weitere Option ist, verpackt stri_extract_last_words() aus dem stringi Paket

library(stringi) 

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

Die Funktion entfernt auch alle Satz, die am Ende des Satzes sein können.

stri_extract_last_words("The quick brown fox? ...") 
# [1] "fox" 
Verwandte Themen