我必须用R读取一个文件,其中可变数量的列由|
字符分隔。但是,如果前面有\
,则不应将其视为分隔符。
我首先想到像strsplit(x, "[^\\][|]")
这样的东西会起作用,但这里的问题是每个管道前的字符都被“消耗”了:
> strsplit("word1|word2|word3\\|aha!|word4", "[^\\][|]")
[[1]]
[1] "word" "word" "word3\\|aha" "word4"
有人可以建议一种方法吗?理想情况下,它应该被矢量化,因为有问题的文件非常大。
答案 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)
(?<!\\\\)[|]