我试图在字符串向量中检测所有转义字符,不包括引号和倒计时("
、'
、`
),但无法安排正确的正则表达式。以下是我尝试过的:
x <- c("i 4like...", NA, "\\rgreat", "\aI like it", "\\", "She said \"yes\"")
grep("\\\\", x) && !grep("\\\"|\\\'|\\\`", x)
我期望得到以下结果:
[1] 3 4 5
因为这些元素包含转义字符,这些字符不是引号或倒计时。
请注意R正则表达式是特定的,其他形式的正则表达式可能无效或需要调整。
发布于 2014-07-08 19:29:59
我想你可能在找不存在的东西。当你做的时候
grep("\\\\", x)
实际上,您正在寻找字符串中的一个文字反斜杠。有一个级别的转义可以在R中键入反斜杠,然后还有一个级别来转义正则表达式本身中的斜杠。
你在期待一场比赛
"\aI like it"
但是字符串本身没有真正的斜线。如果你做cat(x[4])
,你就不会看到斜杠。\a
实际上是警报钟的“符号”。有关允许的转义字符,请参见?Quotes
。
您还会注意到,grep("\\\\", x)
与"She said \"yes\""
不匹配。同样,这是因为字符串中没有实际的斜杠。这正是R默认情况下在控制台中对它们进行编码的方式。您可以通过cat(x[6])
查看未转义的版本,也可以通过nchar(x[6])
确认它有14个字符,而不是16个字符。
https://stackoverflow.com/questions/24639597
复制相似问题