我有一个 csv 文件包含具有值的列,'\\\n'
并且'\\\t'
是转义的新行和制表符。但是,我想将每一行拆分为字符串数组。
如何具体拆分'\n'
而不是'\\\n'
?
我在看 Regex.Split 是正确的方向吗?我试过Regex.Split(input, @"[^\\]\n");
但结果似乎正确但前面的一个字符总是丢失,据说是由[^\]引起的。
如果您想使用 Regex.Split 则@"(?<!\\)\\n"
匹配\n
但不匹配\\n
(\\\n
就此而言)并且不会切断任何内容。后面的负面外观(?<!\\)
不构成匹配的一部分,因此不会删除多余的字符。
如果您正在解析 CSV 文件,请尝试使用TextFieldParser
框架中已有的内容。它将为您省去处理解析分隔文件时出现的所有特定问题的麻烦。
如下所述,它是 的一部分Microsoft.VisualBasic.dll
,但它默认是框架自带的,你只需要一个参考。即使它被称为VisualBasic
,它也绝不是 VB 特有的。
Regex.Split(input, @"[^\\]\n");
上面的正则表达式的问题是方括号只匹配一个字符,它们匹配的内容被视为匹配本身的一部分,这意味着直接在 \n 前面的字符将被视为拆分字符串的一部分并进行相应处理。
我认为您正在寻找的是负面的后视,其用法如下:
(?<!DO NOT MATCH THIS)match
Look-behinds 和look-aheads 确保匹配存在,而不包括匹配的文本作为匹配的一部分。
我假设你正在寻找的是这样的:
Regex.Split(input, @"(?<!\\)\n");
希望有帮助!
这个怎么样:
(?<=^|^[^\\]|[^\\]{2})\\(n|t)
这将说明\n
s 和\t
s 位于输入字符串的开头或第二个位置