У меня есть следующий вектор символов в R:
test <- r"(\")"
> print(test)
[1] "\\\""
> cat(test)
\"
Как видите, он состоит из двух символов,
\"
которые образуют escape-последовательность для одинарной кавычки:
"
Как я могу получить «интерпретируемую» строку, состоящую только из символа кавычки, в R? Другими словами, я ищу функцию, которая обрабатывает строку, содержащуюся в test
, как если бы я ввел ее в консоль вручную.
Предыстория: я получаю неверный ответ от API, который не могу контролировать. Ответ содержит строки с escape-последовательностями, от которых я хотел бы избавиться. Я, конечно, мог бы просто заменить разные последовательности, но это не совсем чисто.
Функция stringi::stri_unescape_unicode
, кажется, делает свое дело:
> cat(stringi::stri_unescape_unicode(test))
"
Вы можете использовать parse
из базы для интерпретации escape-последовательностей в строке.
s <- r"(A\u0042C)"
as.character(parse(text=paste0("'", s, "'")))
#[1] "ABC"
stringi::stri_unescape_unicode(s)
#[1] "ABC"
Если вы просто хотите удалить \
, вы можете использовать gsub
то, что не получится, если есть что интерпретировать.
s <- r"(\")"
gsub("\\\\", "", s)
#[1] "\""
stringi::stri_unescape_unicode(s)
#[1] "\""
s <- r"(A\u0042C)"
gsub("\\\\", "", s)
#[1] "Au0042C"
Мне очень нравится этот ответ! Я безуспешно пытался использовать
parse
— мне не пришло в голову, что вокруг значения строки нужны дополнительные кавычки. Отлично, спасибо!