5

我想清理一个包含转义引号的字符串。我想删除字符串的结尾和开头的转义引号,但保留字符串中的所有引号。我想出的是以下内容。

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"

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

4

1 回答 1

8

以下正则表达式似乎适用于您的示例:

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
于 2012-07-30T09:54:33.303 回答