R - gsub替换反斜杠

时间:2014-12-15 19:51:51

标签: regex r gsub

我想使用gsub来替换字符串中每个出现反斜杠的情况,并带有2个反斜杠。

目前,我所尝试的是gsub("\\\\", "\\", x)。这似乎不起作用。但是,如果我改变表达式而不是用“a”替换每个反斜杠,它就可以正常工作。

> gsub("\\\\", "\\", "\\")
[1] ""
> gsub("\\\\", "a", "\\")
[1] "a"
> gsub("\\\\", "\\\\", "\\")
[1] "\\"

最后一个字符只有一个反斜杠; R只打印2,因为它使用反斜杠打印转义字符。使用nchar确认长度为1。

导致此功能的原因是什么? gsub的第二个参数不是正则表达式,因此在字符串文字中有4个反斜杠应该转换为带有2个反斜杠的字符。上面的第一个gsub调用返回一个空字符串就没什么意义了。

1 个答案:

答案 0 :(得分:26)

这就是你需要的:

gsub("\\\\", "\\\\\\\\", "\\")
[1] "\\\\"

你需要四个反斜杠来表示一个文字反斜杠的原因是"\"是两个R字符串中的转义字符,以及你最终传递模式的正则表达式引擎。如果您直接与正则表达式引擎交谈,则可以使用"\\"来表示字面反斜杠。但是为了让R将"\\"传递给正则表达式引擎,您需要输入"\\\\"


(如果你只是想要反斜杠,你可能想要使用它):

gsub("\\", "\\\\", "\\", fixed=TRUE)
[1] "\\\\"