替换R中的单个反斜杠

时间:2014-08-21 10:47:35

标签: regex r string replace

我有一个看起来像的字符串:

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 …

感谢。

5 个答案:

答案 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"