使用str_replace_all将\替换为\

时间:2018-12-04 23:08:57

标签: r string str-replace stringr

我正在研究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+"

2 个答案:

答案 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中解决此问题