Подтвердить что ты не робот

Заменить одиночную обратную косую черту в 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 …

Спасибо.

4b9b3361

Ответ 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"