如何替换R中的单反斜杠

Tav*_*avi 24 regex string replace r

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

str<-"a\f\r"
Run Code Online (Sandbox Code Playgroud)

我正在尝试删除反斜杠但没有任何作用:

gsub("\","",str, fixed=TRUE)
gsub("\\","",str)
gsub("(\)","",str)
gsub("([\])","",str)
Run Code Online (Sandbox Code Playgroud)

...基本上你可以想象的所有变化.我甚至尝试过这个string_replace_all功能.任何帮助?

我正在使用R版本3.1.1; Mac OSX 10.7; 将dput在我的琴弦的矢量一个字符串给出:

dput(line)
"ud83d\ude21\ud83d\udd2b"
Run Code Online (Sandbox Code Playgroud)

我使用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 …

谢谢.

Hon*_*Ooi 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
Run Code Online (Sandbox Code Playgroud)

请注意,如果你这样做

str <- "a\f\r"
Run Code Online (Sandbox Code Playgroud)

然后str包含任何反斜杠.它由3个字符的a,\f(这通常不是可打印的,除非\f,和\r(相同).

只是为了阻止一个可能的问题.如果从文件中读取数据,则文件不必具有加倍的反斜杠.例如,如果您有一个test.txt包含的文件

a\b\c\d\e\f
Run Code Online (Sandbox Code Playgroud)

你也是

str <- readLines("test.txt")
Run Code Online (Sandbox Code Playgroud)

然后str将包含a\b\c\d\e\f您期望的字符串:6个字母由5个单个反斜杠分隔.但是如果你想使用它,你仍然需要输入加倍的反斜杠.

str <- gsub("\\", "", str, fixed=TRUE)  # now contains abcdef
Run Code Online (Sandbox Code Playgroud)

从中dput,看起来你所拥有的是UTF-16编码文本,它可能来自Windows机器.根据

它在补充多语言平面中编码字形,这是非常模糊的.我猜你需要提供的参数encoding="UTF-16"readLines当你的文件中读取.

  • 您只是将问题采纳为答案还是我遗漏了什么?她有 `str&lt;-"a\f\r"` 字符串,而不是 `str &lt;-"this\\is\\my\\string"` (2认同)
  • 如果你把问题调整到答案(就像你做的那样),他们会很好,是的. (2认同)

bar*_*nus 9

这可能会有所帮助:)

require(stringi)
stri_escape_unicode("ala\\ma\\kota")
## [1] "ala\\\\ma\\\\kota"
stri_unescape_unicode("ala\\ ma\\ kota")
## [1] "ala ma kota"
Run Code Online (Sandbox Code Playgroud)


Jel*_*ina 9

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

gsub("\\\\", "", str)
Run Code Online (Sandbox Code Playgroud)

感谢上面的评论.

  • 但这实际上不起作用: `&gt; str &lt;- '\a\f\r' &gt; str [1] "\a\f\r" &gt; gsub("\\\\", "", str ) [1] "\a\f\r"` (2认同)

Tav*_*avi 7

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

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

  • 这不是一个好的解决方案,因为它也会删除空格.更好的是gsub("\\\\","",str) (4认同)
  • 为排除的字符添加空格:`gsub("[^A-Za-z0-9 ]", "", str)` (3认同)