"正则表达式无效...原因'尾随反斜杠'''' R中的gsub错误

时间:2014-03-31 07:32:56

标签: r gsub

我在替换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'

2 个答案:

答案 0 :(得分:7)

参数的顺序错误。研究help("gsub")

gsub( "\\", "", "Easy bruising and bleeding.\\", fixed=TRUE)
#[1] "Easy bruising and bleeding."

答案 1 :(得分:2)

tl;博士:\的第一个参数中需要4个\\\\(即gsub),以便在\的第三个参数中找到一个文字gsub。整个过程是:

  • gsub收到\\\\,通过\\
  • regex收到\\,搜索\

为避免使用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.\ 的原因。