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 に答える