我想使用gsub
来替换字符串中每个出现反斜杠的情况,并带有2个反斜杠。
目前,我所尝试的是gsub("\\\\", "\\", x)
。这似乎不起作用。但是,如果我改变表达式而不是用“a”替换每个反斜杠,它就可以正常工作。
> gsub("\\\\", "\\", "\\")
[1] ""
> gsub("\\\\", "a", "\\")
[1] "a"
> gsub("\\\\", "\\\\", "\\")
[1] "\\"
最后一个字符只有一个反斜杠; R只打印2,因为它使用反斜杠打印转义字符。使用nchar
确认长度为1。
导致此功能的原因是什么? gsub
的第二个参数不是正则表达式,因此在字符串文字中有4个反斜杠应该转换为带有2个反斜杠的字符。上面的第一个gsub
调用返回一个空字符串就没什么意义了。
答案 0 :(得分:26)
这就是你需要的:
gsub("\\\\", "\\\\\\\\", "\\")
[1] "\\\\"
你需要四个反斜杠来表示一个文字反斜杠的原因是"\"
是两个R字符串中的转义字符,以及你最终传递模式的正则表达式引擎。如果您直接与正则表达式引擎交谈,则可以使用"\\"
来表示字面反斜杠。但是为了让R将"\\"
传递给正则表达式引擎,您需要输入"\\\\"
。
(如果你只是想要反斜杠,你可能想要使用它):
gsub("\\", "\\\\", "\\", fixed=TRUE)
[1] "\\\\"