我想用一个反斜杠和一个像这样的空格替换一个空格:
"foo bar" --> "foo\ bar"
我找到了如何用multiple backslashes替换,但无法将其改编为单个反斜杠。
到目前为止我试过这个:
x <- "foo bar"
gsub(" ", "\\ ", x)
# [1] "foo bar"
gsub(" ", "\\\ ", x)
# [1] "foo bar"
gsub(" ", "\\\\ ", x)
# [1] "foo\\ bar"
但是,所有结果都不能满足我的需求。我需要替换来动态创建包含名称为
的文件夹的文件路径 /some/path/foo bar/foobar.txt
。
要在system()
空格中使用它们进行shell命令,必须退出\
到
/some/path/foo\ bar/foobar.txt
。
你知道如何解决这个问题吗?
答案 0 :(得分:5)
您的问题是字符串的内容与其表示之间的混淆。当您在R中以普通方式打印字符串时,永远不会看到一个反斜杠(除非它表示一个特殊字符,例如print("y\n")
。如果您使用cat()
代替,你只会看到一个反斜杠。
x <- "foo bar"
y <- gsub(" ", "\\\\ ", x)
print(y)
## [1] "foo\\ bar"
cat(y,"\n") ## string followed by a newline
## foo\ bar
字符串中有8个字符; 6个字母,一个空格和反斜杠。
nchar(y) ## 8
为了进行比较,请考虑\n
(换行符)。
z <- gsub(" ", "\n ", x)
print(z)
## [1] "foo\n bar"
cat(z,"\n")
## foo
## bar
nchar(z) ## 8
如果您正在构建文件路径,则可能更容易使用正斜杠 - 正斜杠在所有操作系统(甚至Windows)上用作R中的文件分隔符。或者查看file.path()
。 (我不知道你想要做什么,我不能多说。)
答案 1 :(得分:4)
要用一个反斜杠和一个空格替换空格,您甚至不需要使用正则表达式,使用gsub(" ", "\\ ", x)
首次尝试使用fixed=TRUE
:
> x <- "foo bar"
> res <- gsub(" ", "\\ ", x, fixed=TRUE)
> cat(res, "\n")
foo\ bar
cat
函数显示“真实的”文字反斜杠。