2012-07-30 37 views
5

Quiero limpiar una cadena que contiene comillas escapadas. Quiero eliminar las comillas escapadas al final y al principio de una cadena, pero mantener intactas todas las marcas de qoutation dentro de la cadena. Lo que se me ocurrió es lo siguiente.eliminar las comillas de la cadena al principio y al final solo si ambas están presentes

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

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

Lo que estoy luchando con ahora es que sólo quiero quitar las comillas si y sólo si hay una al principio y al final. De lo contrario, no. La siguiente expresión elimina falsamente la principal.

s2 <- "\"Hello!\" he said" 
str_replace_all(s2, "(^\\\")|(\\\"$)", "") 

> [1] "Hello!\" he said" 

Aquí mi expresión regular debe indicar que sólo quiero eliminarlos en caso de que la cadena entera se envuelve entre comillas escapado. ¿Cómo puedo hacer eso?

Respuesta

7

La siguiente expresión regular parece trabajar en sus ejemplos:

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

La expresión regular utiliza copias de referencias (\\1) para devolver sólo la cadena dentro de la cita que lleva ^\" y la cita de arrastre \"$:

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

Esto resultados:

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