Заменить одиночную обратную косую черту в R
У меня есть строка, которая выглядит так:
str<-"a\f\r"
Я пытаюсь удалить обратную косую черту, но ничего не работает:
gsub("\","",str, fixed=TRUE)
gsub("\\","",str)
gsub("(\)","",str)
gsub("([\])","",str)
... в основном все варианты, которые вы можете себе представить. Я даже попробовал функцию string_replace_all
. ЛЮБАЯ ПОМОЩЬ?
Я использую R 3.1.1; Mac OSX 10.7; dput
для одной строки в моем векторе строк дает:
dput(line)
"ud83d\ude21\ud83d\udd2b"
Я импортировал файл, используя readLines
из стандартного .txt
. Содержимое файла выглядит примерно так:
got an engineer booked for this afternoon \ud83d\udc4d all now hopefully sorted\ud83d\ude0a I m going to go insane ud83d\ude21\ud83d\udd2b in utf8towcs …
Спасибо.
Ответы
Ответ 1
Поскольку нет прямых способов борьбы с одиночными обратными косыми чертами, здесь самое близкое решение проблемы, предложенное Дэвидом Аренбургом в разделе комментариев
gsub("[^A-Za-z0-9]", "", str) #remove all besides the alphabets & numbers
Ответ 2
При вводе обратной косой черты с клавиатуры всегда избегайте их.
str <-"this\\is\\my\\string" # note doubled backslashes -> 'this\is\my\string'
gsub("\\", "", str, fixed=TRUE) # ditto
str2 <- "a\\f\\r" # ditto -> 'a\f\r'
gsub("\\", "", str2, fixed=TRUE)# ditto
Обратите внимание, что если вы делаете
str <- "a\f\r"
тогда str
содержит обратной косой черты. Он состоит из 3 символов a
, \f
(которые обычно не печатаются, кроме как \f
и \r
(то же самое).
И просто чтобы избежать возможного вопроса. Если ваши данные были прочитаны из файла, файл не должен иметь двойной обратной косой черты. Например, если у вас есть файл test.txt
содержащий
a\b\c\d\e\f
и вы делаете
str <- readLines("test.txt")
тогда str
будет содержать строку a\b\c\d\e\f
как и следовало ожидать: 6 букв, разделенных 5 одиночными обратными слешами. Но вам все равно придется вводить двойную обратную косую черту, если вы хотите работать с ней.
str <- gsub("\\", "", str, fixed=TRUE) # now contains abcdef
С точки dput
, похоже, что у вас есть текст в кодировке UTF-16, который, вероятно, пришел с машины Windows. В соответствии с
он кодирует глифы в дополнительной многоязычной плоскости, которая довольно неясна. Я предполагаю, что вам нужно предоставить аргумент encoding="UTF-16"
для readLines
когда вы читаете в файле.
Ответ 3
Это может быть полезно:)
require(stringi)
stri_escape_unicode("ala\\ma\\kota")
## [1] "ala\\\\ma\\\\kota"
stri_unescape_unicode("ala\\ ma\\ kota")
## [1] "ala ma kota"
Ответ 4
Одно вполне универсальное решение
gsub("\\\\", "", str)
Благодаря вышеприведенному комментарию.
Ответ 5
Это то же самое, что и принятый ответ, но меньше удаляется (только символы не ascii):
gsub("[^ -~]", '', "a\f\r")
## [1] "a"
Ответ 6
вы можете использовать str_replace_all (str, "\\" "/" )
после добавления еще одной обратной косой черты как "a\f\r"