2015-05-25 11 views
5

Zum Beispiel das jedes Wort der Länge entspricht 3 oder mehr, und ersetzt sie durch xx:Wie schneidet man alle Wörter in einer Zeichenfolge oberhalb der gegebenen Länge ab?

library(stringr) 
str_replace_all(c("This is a long", "Another one."), "([a-zA-Z]{3,})", "xx") 
#output: "xx is a xx" "xx xx" 

Was ist Ich mag würde bekommen:

#"Thi is a lon" "Ano one." 
+0

Eine nicht regex Lösung könnte auch sein, 'sapply (strsplit (c ("Dies ist ein langer", "eine andere."), '‚) Verwenden, Funktion (x) einfügen (strtrim (x, 3), collapse = "")) ', aber du wirst die Interpunktionen verlieren. –

+0

Oder ein Lookaround-Ansatz wäre 'gsub (" (? <= [A-Za-z] {3}) [A-Za-z] + ", c (" Das ist ein langer "," Ein anderer ").), perl = TRUE) ' – akrun

Antwort

4

Sie können Folgendes anpassen verwenden :

([a-zA-Z]{3})[a-zA-Z]+ 

und ersetzen mit \\1

Sie können auch gsub (von Kommentaren)

gsub("([a-zA-Z]{3})[a-zA-Z]+", "\\1", c("This is a long", "Another one.")) 
+3

Mit R wäre es' gsub ("([a-zA-Z] {3}) [a-zA-Z] +", "\\ 1", c ("Das ist ein langes "," ein anderes. "))' –

+0

@DavidArenburg yeah .. ich fast aktualisiert .. danke :) –

Verwandte Themen