我正在尝试使用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个字符。