4

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

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

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

谁能建议一种方法来做到这一点?理想情况下,它应该被矢量化,因为有问题的文件非常大。

4

2 回答 2

5

我相信这行得通;使用 Anirudh 被否决的答案(不知道为什么被否决,它不起作用但正则表达式是正确的)

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

## > strsplit(x, "(?<!\\\\)[|]", perl=TRUE)
## [[1]]
## [1] "word1"        "word2"        "word3\\|aha!" "word4" 
于 2013-06-21T14:03:51.223 回答
4

您需要使用零宽度断言(lookbehind)

(?<!\\\\)[|]
于 2013-06-21T13:53:21.317 回答