我在替换R中的文本时收到错误消息。
x
[1] "Easy bruising and bleeding.\\"
gsub(as.character(x), "\\", "")
Error in gsub(as.character(x), "\\", "") :
invalid regular expression 'Easy bruising and bleeding.\', reason 'Trailing backslash'
答案 0 :(得分:7)
参数的顺序错误。研究help("gsub")
。
gsub( "\\", "", "Easy bruising and bleeding.\\", fixed=TRUE)
#[1] "Easy bruising and bleeding."
答案 1 :(得分:2)
tl;博士:
在\
的第一个参数中需要4个\\\\
(即gsub
),以便在\
的第三个参数中找到一个文字gsub
。整个过程是:
\\\\
,通过\\
\\
,搜索\
。为避免使用fixed = TRUE
来排除进行更复杂的搜索,您的代码应为:
> gsub( "\\\\", "", "Easy bruising and bleeding.\\")
[1] "Easy bruising and bleeding."
说明:
您需要4 \
的原因是\
是正则表达式引擎的特殊字符,因此,为了使正则表达式引擎找到文字\
,需要将其传递{{1 }};第一个\\
表示第二个\
不是特殊字符,而是应按字面值匹配的\
。因此,正则表达式接收\
并在字符串中搜索\\
。
\
也是R的特殊字符,因此,为了使\
传递gsub
到正则表达式引擎,\\
必须被接收{{1} }。第一个gsub
表示第二个\\\\
是文字\
而不是特殊字符;第三\
与第四\
做相同的事情。因此,gsub接收\
并将\
传递给正则表达式引擎。
同样,整个过程是:
gsub接收\\\\
,通过\\
; regex接收\\\\
,搜索\\
。
注意:当您给我们提供的字符串以\\
的形式显示在屏幕上时,该字符串实际上是\
。实际上,第一个"Easy bruising and bleeding.\\"
只是第二个Easy bruising and bleeding.\
的转义符。您可以使用以下代码进行验证:
\
这就是为什么我建议的代码包含4个\
而不是8个> cat("Easy bruising and bleeding.\\")
Easy bruising and bleeding.\
的原因。