我尝试使用{{1}在字符串向量中检测所有转义字符,不包括引号和后标记("
,'
,`
)但是无法安排正确的正则表达式。这是我尝试过的:
grep
我希望得到以下结果:
x <- c("i 4like...", NA, "\\rgreat", "\aI like it", "\\", "She said \"yes\"")
grep("\\\\", x) && !grep("\\\"|\\\'|\\\`", x)
由于这些元素包含不是引号或后退标记的转义字符。
请注意,R正则表达式是特定的,其他形式的正则表达式可能不起作用或需要调整。
答案 0 :(得分:3)
我想你可能正在寻找那些不存在的东西。当你这样做
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个字符。