2014-07-08 25 views
2

我想检测所有转义字符,不包括引号和背部蜱("'`),在使用grep字符串的载体,但不能安排适当的正则表达式。以下是我已经试过:查找转义字符不包括引号和背部蜱

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

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

我希望以下结果:

[1] 3 4 5 

由于这些元素包含转义字符不在引号或单引号。

请注意,R正则表达式是特定的,其他形式的正则表达式可能无法正常工作或需要调整。

回答

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

+0

+1的确,我几乎要回答同样的问题。 – hwnd