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


在此,我的正则表达式应指示仅在整个字符串都用转义引号引起来的情况下才要删除它们。我怎样才能做到这一点?

最佳答案

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

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

07-24 09:52
查看更多