我有一个csv文件包含值为'\\\n'
和'\\\t'
的列,这些列是新的换行符和制表符。但是,我想将每一行拆分为字符串数组。
如何专门拆分'\n'
而不是'\\\n'
?
我正在看Regex.Split是正确的方向吗?我试过Regex.Split(input, @"[^\\]\n");
,但结果似乎是正确的,但前面的一个字符总是丢失,据说是由[^ \]引起的。
答案 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