我正在研究R for Data Science,其中一项练习要求我将所有正斜杠替换为反斜杠。我无法使它正常工作。
> x <- c("//w+", "//b[aeiou]//b")
> str_replace_all(x, "/", "\\")
[1] "w+" "b[aeiou]b"
在线解决方案也不起作用,因为它用两个反斜杠代替了一个正斜杠。
> x <- c("//w+", "//b[aeiou]//b")
> str_replace_all(x, "/", "\\\\")
[1] "\\\\w+" "\\\\b[aeiou]\\\\b"
编辑:我添加此内容是为了澄清我的问题。我从字面上希望字符串“ //”为“ \\”。我无法做到这一点。这是一个实际的示例,说明它如何工作。
之所以有效,是因为我在字符串中正确使用了\\
> x <- "\\w+'\\w+"
> sentence <- "Open the crate but don't break the glass."
> str_extract(sentence, x)
[1] "don't"
这不起作用。我错误地使用了/而不是\,并尝试使用str_replace_all来解决此问题:
> y <- "//w+'//w+"
> z <- str_replace_all(y, "/", "\\\\")
> str_extract(sentence, z)
[1] NA
那是因为z不像我希望的那样是“ \\ w +'\\ w +”,而是:
> z
[1] "\\\\w+'\\\\w+"
答案 0 :(得分:1)
在线提供的解决方案实际上可以正常工作!您看到的多余的反斜杠是其他功能正确解释\
字符存在所必需的escape characters。
以下命令:
x <- c("//w+", "//b[aeiou]//b")
y <- str_replace_all(x, "/", "\\\\")
产生新向量y
。当打印到R控制台时,您将看到以下内容:
[1] "\\\\w+" "\\\\b[aeiou]\\\\b"
这看起来是错误的,但事实并非如此。同样,多余的反斜杠也用于逃避字面反斜杠。如果将这些字符串提供给解释字符串的函数,您会看到字符串表示形式实际上是正确的,每个正斜杠都替换为反斜杠:
message(y)
\\w+\\b[aeiou]\\b
cat(y)
\\w+ \\b[aeiou]\\b
答案 1 :(得分:1)
str_replace_all(x, "/", "\\\\")
和str_replace_all(x, "/", "\\")
都在r中解决此问题