2

我有一个 csv 文件包含具有值的列,'\\\n'并且'\\\t'是转义的新行和制表符。但是,我想将每一行拆分为字符串数组。

如何具体拆分'\n'而不是'\\\n'

我在看 Regex.Split 是正确的方向吗?我试过Regex.Split(input, @"[^\\]\n");但结果似乎正确但前面的一个字符总是丢失,据说是由[^\]引起的。

4

4 回答 4

5

如果您使用 Regex.Split 则@"(?<!\\)\\n"匹配\n但不匹配\\n\\\n就此而言)并且不会切断任何内容。后面的负面外观(?<!\\)不构成匹配的一部分,因此不会删除多余的字符。

于 2013-08-10T17:07:41.900 回答
2

如果您正在解析 CSV 文件,请尝试使用TextFieldParser框架中已有的内容。它将为您省去处理解析分隔文件时出现的所有特定问题的麻烦。


如下所述,它是 的一部分Microsoft.VisualBasic.dll,但它默认是框架自带的,你只需要一个参考。即使它被称为VisualBasic,它也绝不是 VB 特有的。

于 2013-08-10T17:07:52.213 回答
1
Regex.Split(input, @"[^\\]\n");

上面的正则表达式的问题是方括号只匹配一个字符,它们匹配的内容被视为匹配本身的一部分,这意味着直接在 \n 前面的字符将被视为拆分字符串的一部分并进行相应处理。

我认为您正在寻找的是负面的后视,其用法如下:

(?<!DO NOT MATCH THIS)match

Look-behinds 和look-aheads 确保匹配存在,而不包括匹配的文本作为匹配的一部分。

我假设你正在寻找的是这样的:

Regex.Split(input, @"(?<!\\)\n");

希望有帮助!

于 2013-08-10T17:24:42.247 回答
0

这个怎么样:

(?<=^|^[^\\]|[^\\]{2})\\(n|t)

这将说明\ns 和\ts 位于输入字符串的开头或第二个位置

于 2013-08-10T17:09:18.330 回答