2012-07-30 63 views
5

我想清除包含转义引号的字符串。我想删除转义引号字符串的结尾和开头,但保留字符串中的所有qoutation标记完整。我想到的是以下内容。只有在两者都存在的情况下,才能从字符串中删除引号

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

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

我现在所挣扎的是,我只是想去掉引号当且仅当有一个在开始和结尾。否则不是。下面的表达式会错误地删除前面的那个。

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

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

在这里,我的正则表达式应该表明,我只想在整个字符串用转义引号包装的情况下删除它们。我怎样才能做到这一点?

回答

7

下面的正则表达式似乎对你的例子工作:

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

正则表达式使用反向引用(\\1)返回领先的报价^\"和尾随报价\"$里面只有字符串:

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

结果为:

cat(r, sep="\n") 
He said:"Hello" - some word 
"Hello!" he said 
相关问题