2011-08-25 15 views
16

Ho un vettore di caratteri in cui ogni elemento è racchiuso tra parentesi. Voglio per rimuovere le parentesi e avere solo la stringa.Rimozione di staffe da una stringa

Così ho provato:

n = c("[Dave]", "[Tony]", "[Sara]") 

paste("", n, "", sep="") 

Unforunately, questo non funziona per qualche motivo. Ho eseguito la stessa operazione prima di utilizzare lo stesso codice e non sono sicuro del motivo per cui non funziona questa volta.

Voglio passare da '[Dave]' a 'Dave'.

Cosa sto sbagliando?

+0

Sono curioso perché il vostro 'comando paste' "lavorato" in passato ... –

risposta

36

Si potrebbe gsub le staffe in questo modo:

n = c("[Dave]", "[Tony]", "[Sara]") 

gsub("\\[|\\]", "", n) 
[1] "Dave" "Tony" "Sara" 
9

Una sostituzione di espressione regolare lo farà. Guarda la funzione gsub().

Questo ti dà ciò che si vuole (si rimuove qualsiasi istanza di '[' o ']'):

gsub("\\[|\\]", "", n) 
+0

qual è la 'n' per? –

5

L'altro le risposte dovrebbero essere sufficienti per ottenere l'output desiderato. Volevo solo fornire una breve spiegazione del motivo per cui ciò che hai provato non funzionava.

pasteconcatena stringhe di caratteri. Se si imposta paste una stringa di caratteri vuota, "", a qualcosa con un separatore che è anche una stringa di caratteri vuota, in realtà non è stato modificato nulla. Quindi, paste non può rendere più breve una stringa di caratteri; il risultato sarà lo stesso (come nel tuo esempio) o più lungo.

2

Se si lavora all'interno di tidyverse:

library(tidyverse); library(stringr) 

n = c("[Dave]", "[Tony]", "[Sara]") 

n %>% str_replace_all("\\[|\\]", "") 
[1] "Dave" "Tony" "Sara" 
Problemi correlati