替换R中的单个反斜杠

问题描述 投票:22回答:5

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

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 …

谢谢。

regex r string replace
5个回答
12
投票

从键盘输入反斜杠时,请务必将其转义。

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机器。根据

它编码Supplementary Multilingual Plane中的字形,这是非常模糊的。我猜你在文件中读到时需要向encoding="UTF-16"提供参数readLines


9
投票

这可能会有所帮助:)

require(stringi)
stri_escape_unicode("ala\\ma\\kota")
## [1] "ala\\\\ma\\\\kota"
stri_unescape_unicode("ala\\ ma\\ kota")
## [1] "ala ma kota"

9
投票

一个非常普遍的解决方案是

gsub("\\\\", "", str)

感谢上面的评论。


7
投票

由于没有任何直接的方法来处理单个反斜杠,这是David Arenburg在评论部分提供的最接近问题的解决方案

gsub("[^A-Za-z0-9]", "", str) #remove all besides the alphabets & numbers

1
投票

这与接受的答案相同,但rtmoves less(只是非ascii字符):

gsub("[^ -~]", '', "a\f\r") 
## [1] "a"
© www.soinside.com 2019 - 2024. All rights reserved.