拆分'; ';而不是'n';转换为字符串数组

本文关键字:转换 字符串 数组 拆分 | 更新日期: 2023-09-27 18:27:04

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

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

我在看雷格斯。斯普利特是正确的方向吗?我尝试了Regex.Split(input, @"[^'']'n");,但结果似乎是正确的,但前面总是缺少一个字符,据说是由[^'']引起的。

拆分';
';而不是'n';转换为字符串数组

如果希望使用Regex.Split,则@"(?<!'')''n"匹配'n,但不匹配''n(也匹配'''n),并且不会截断任何内容。(?<!'')后面的否定外观不构成匹配的一部分,因此不会删除多余的字符。

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


如下所述,它是Microsoft.VisualBasic.dll的一部分,但默认情况下,它随框架一起提供,您只需要一个参考即可。尽管它被称为VisualBasic,但它并不是VB特有的。

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

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

我认为你要找的是一个消极的背后看,它的用法如下:

(?<!DO NOT MATCH THIS)match

向后看和向前看确保匹配存在,而不将匹配的文本作为匹配的一部分。

我想你正在寻找的是这样的东西:

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

希望能有所帮助!

这个怎么样:

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

这将说明'n s和't s位于输入字符串的开始或第二个位置