仅在两者都存在时才从开头和结尾处删除引号

时间:2012-07-30 09:45:01

标签: regex r stringr

我想清理包含转义引号的字符串。我想删除字符串的结尾和开头的转义引号,但保持字符串中所有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"

这里我的正则表达式应该表明我只想删除它们以防整个字符串被包装在转义引号中。我怎么能这样做?

1 个答案:

答案 0 :(得分: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