为什么R中的nchar(“\\”)= 1?

时间:2012-04-24 12:43:48

标签: regex string r character

为什么R中有nchar("\\")=1, nchar("\abcde")=5等?哪个函数用于nchar("\\")=2, nchar("\abcde")=6

3 个答案:

答案 0 :(得分:6)

在R中,如果你想要一个文字\,你需要像其他人所说的那样逃避它。我没有在您的示例中看到encodeString()的原因。使用nchar()更容易,并记住我的答案的第一行:逃避您的\

> nchar("\\\\")
[1] 2
> nchar("\\abcde")
[1] 6

如果您想忘记转义,那么encodeString()可以提供帮助,但您要么做一个(手动转义)使用escapeString(),而不是两者:

> encodeString("\\")
[1] "\\\\"
> encodeString("\abcde")
[1] "\\abcde"

最后,\uXXXX是一种在R中输入unicode字符的方法,这样可以捕获encodeString()

> nchar(encodeString("\u2642"))
[1] 1

因为它想将此视为unicode字符的表示。在这种情况下,“逃避他们自己”的事情做对了:

> nchar("\\u2642")
[1] 6

我不确定将\替换为R中\\的字符串为\uXXXX的直接方式,因为它将首先解释为unicdoe字符且仅然后将进行替换(但此时没有\。请参阅?Quotes以获取R中使用的转义序列列表。

答案 1 :(得分:4)

反斜杠是escaping下一个字符。 这在许多编程语言中很常见;允许您在字符串中嵌入控件和其他非打印字符,例如`\ n'表示换行符。

所以'\'实际上是单\个字符。 解决问题的最简单方法是将反斜杠加倍:nchar("\\abcde") = 6

答案 2 :(得分:1)

  

nchar(encodeString("\\"))

应该给你你想要的东西。