2012-07-30 16 views
5

Ich möchte eine Zeichenfolge bereinigen, die Escape-Anführungszeichen enthält. Ich möchte das maskierte Anführungszeichen entfernen, das das Ende und den Anfang eines Strings markiert, aber alle Qoutation-Zeichen innerhalb des Strings intakt behält. Was ich mir ausgedacht habe, ist folgendes.Entfernen von Anführungszeichen aus Zeichenfolge am Anfang und Ende nur dann, wenn beide vorhanden sind

library(stringr) 
s1 <- "\"He said:\"Hello\" - some word\"" 
str_replace_all(s1, "(^\\\")|(\\\"$)", "") 

> [1] "He said:\"Hello\" - some word" 

Was ich jetzt kämpfen, ist, dass ich nur die Anführungszeichen entfernen möchten, wenn und nur wenn es eine am Anfang und am Ende ist. Sonst nicht. Der folgende Ausdruck entfernt den führenden falsch.

Hier sollte meine Regex angeben, dass ich sie nur entfernen möchte, falls die gesamte Zeichenfolge in umbrochene Anführungszeichen eingeschlossen wird. Wie kann ich das machen?

Antwort

7

Die folgende Regex scheint auf Ihre Beispiele zu arbeiten:

s <- c("\"He said:\"Hello\" - some word\"", "\"Hello!\" he said") 

Die Regex verwendet zurück Verweise (\\1) nur die Zeichenfolge innerhalb der führenden Zitat ^\" und dem hinteren Zitat \"$ zurückzukehren:

r <- gsub("^\"(.*)\"$", "\\1", s) 

Daraus ergibt sich:

cat(r, sep="\n") 
He said:"Hello" - some word 
"Hello!" he said 
Verwandte Themen