查找不包括引号和后退标记的转义字符

时间:2014-07-08 18:53:31

标签: regex r

我尝试使用{{1}在字符串向量中检测所有转义字符,不包括引号和后标记("'`)但是无法安排正确的正则表达式。这是我尝试过的:

grep

我希望得到以下结果:

x <- c("i 4like...", NA, "\\rgreat", "\aI like it", "\\", "She said \"yes\"")

grep("\\\\", x) && !grep("\\\"|\\\'|\\\`", x) 

由于这些元素包含不是引号或后退标记的转义字符。

请注意,R正则表达式是特定的,其他形式的正则表达式可能不起作用或需要调整。

1 个答案:

答案 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个字符。