在R中用未转义的分隔符拆分字符串

时间:2013-06-21 13:50:33

标签: regex r

我必须用R读取一个文件,其中可变数量的列由|字符分隔。但是,如果前面有\,则不应将其视为分隔符。

我首先想到像strsplit(x, "[^\\][|]")这样的东西会起作用,但这里的问题是每个管道前的字符都被“消耗”了:

> strsplit("word1|word2|word3\\|aha!|word4", "[^\\][|]")
[[1]]
[1] "word"        "word"        "word3\\|aha" "word4" 

有人可以建议一种方法吗?理想情况下,它应该被矢量化,因为有问题的文件非常大。

2 个答案:

答案 0 :(得分:5)

我相信这有效;使用Anirudh的downvoted答案(不确定为什么downvote,它不起作用,但正则表达式是正确的)

strsplit(x, "(?<!\\\\)[|]", perl=TRUE)

## > strsplit(x, "(?<!\\\\)[|]", perl=TRUE)
## [[1]]
## [1] "word1"        "word2"        "word3\\|aha!" "word4" 

答案 1 :(得分:4)

您需要使用zero width assertion(lookbehind)

(?<!\\\\)[|]