R - gsub替换反斜杠

Jon*_*aus 17 regex r gsub

我想gsub用2个反斜杠替换字符串中每个出现反斜杠的情况.

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

> gsub("\\\\", "\\", "\\")
[1] ""
> gsub("\\\\", "a", "\\")
[1] "a"
> gsub("\\\\", "\\\\", "\\")
[1] "\\"
Run Code Online (Sandbox Code Playgroud)

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

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

Jos*_*ien 30

这就是你需要的:

gsub("\\\\", "\\\\\\\\", "\\")
[1] "\\\\"
Run Code Online (Sandbox Code Playgroud)

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


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

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