удаляйте кавычки из строки в начале и в конце, только если присутствуют оба

Я хочу очистить строку, содержащую экранированные кавычки. Я хочу удалить экранированные кавычки, обозначающие конец и начало строки, но сохранить без изменений все кавычки внутри строки. Я пришел к следующему.

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"

Здесь мое регулярное выражение должно указывать, что я хочу удалить их только в том случае, если вся строка заключена в экранированные кавычки. Как я могу это сделать?


person Mark Heckmann    schedule 30.07.2012    source источник


Ответы (1)


Следующее регулярное выражение, похоже, работает на ваших примерах:

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
person Andrie    schedule 30.07.2012