我有一个看起来像的字符串:
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 …
感谢。
答案 0 :(得分:11)
从键盘输入反斜杠时,请务必将其转义。
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
包含 no 反斜杠。它由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机器。根据
它编码Supplementary Multilingual Plane中的字形,这是非常模糊的。我猜你在阅读文件时需要向encoding="UTF-16"
提供参数{/ p>。
答案 1 :(得分:9)
这可能会有所帮助:)
require(stringi)
stri_escape_unicode("ala\\ma\\kota")
## [1] "ala\\\\ma\\\\kota"
stri_unescape_unicode("ala\\ ma\\ kota")
## [1] "ala ma kota"
答案 2 :(得分:9)
一个非常通用的解决方案是
gsub("\\\\", "", str)
感谢上面的评论。
答案 3 :(得分:7)
由于没有任何直接的方法来处理单个反斜杠,这里是David Arenburg在评论部分提供的最接近问题的解决方案
gsub("[^A-Za-z0-9]", "", str) #remove all besides the alphabets & numbers
答案 4 :(得分:1)
这与接受的答案相同,但rtmoves less(只是非ascii字符):
gsub("[^ -~]", '', "a\f\r")
## [1] "a"