将'\ n'而不是'\\ n'拆分为字符串数组

时间:2013-08-10 16:53:11

标签: c# .net string split

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

如何专门拆分'\n'而不是'\\\n'

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

4 个答案:

答案 0 :(得分:5)

如果您希望使用Regex.Split,那么@"(?<!\\)\\n"匹配\n但不匹配\\n\\\n就此而言)和不会削减任何东西。 <{1}}背后的负面外观并不构成比赛的一部分,因此不会删除额外的角色。

答案 1 :(得分:2)

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


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

答案 2 :(得分:1)

Regex.Split(input, @"[^\\]\n");

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

我认为你所寻找的是一个负面的后视,其用法如下:

(?<!DO NOT MATCH THIS)match

后视和前瞻确保匹配存在而不包括匹配的文本作为匹配的一部分。

我认为你要找的东西是这样的:

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

希望有所帮助!

答案 3 :(得分:0)

这个怎么样:

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

这将考虑位于输入字符串开头或第二位置的\n\t