查找不包括引号和反引号的转义字符



我正在尝试使用grep检测字符串向量中的所有转义字符,不包括引号和反引号("'`(,但无法排列正确的正则表达式。以下是我尝试过的:

x <- c("i 4like...", NA, "\rgreat", "aI like it", "\", "She said "yes"")
grep("\\", x) && !grep("\"|\'|\`", x) 

我希望得到以下结果:

[1] 3 4 5

因为这些元素包含的转义字符不是引号或反引号。

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

我想您可能正在寻找不存在的东西。当你做

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

最新更新