我正在创建一个逗号分隔值行的字符串数组 我需要拆分\ n而不是引号内的换行符。
以下是目前的代码:
string[] lines = Regex.Split(value, @"\n(?=(?:[^""]*""[^""]*"")*(?![^""]*""))");
执行需要很长时间 我可以使用更好的选择吗?
感谢您提供任何帮助。
更新 这是一个\ n我想跳过的例子,因为它们在引号中:
\“地址 - 430楼F \ r \ n \ r \ nNickname- Joe \”
我不知道为什么这些数据都像那样疯狂,但我不希望它在引号中分裂那些\ n。
答案 0 :(得分:1)
你可以在没有正则表达式的情况下通过拆分每个\ n并计算每行和前一行的引号数来实现。
第一行:
对于其他行:
这背后的想法是,因为引号必须成对出现,如果有一个奇数引号,或者一个没有关闭,或者前一行的引用在这个中被关闭,相反,如果有一个偶数然后它发生与前一行相同。
基本上你在每个\ n分割,然后'未分割'(合并在一起)两行,如果\ n在引号内。
这种方法的好处在于它可以轻松并行化!
例如,请采用以下文字:
"aa", "bb", "cc",\n
"11", "22", "3\n
3",\n
"xx", "y\n
y", "z\n
z"
这是如何工作的:
"aa", "bb", "cc",
第一行带有偶数引号(6),因此该行被正确分割。
"11", "22", "3
奇数引号(5)所以你应该像上一行那样做相反的事情。由于前一行被拆分,因此不应拆分该行,因此将其与下一行合并。实际上,最后一句话在下一行结束。
3",
奇数引号(1);反其道而行之。上次我们合并,所以这种拆分是正确的。
"xx", "y
奇数引号,所以我们应该做相反的事情。以前我们没有合并,所以这次我们将这一行与下一行合并。
y", "z
偶数引号,就像在previos行中所做的那样(即与下一行合并)。
z"
奇数引号所以这次我们不应该合并。 (需要将最后一行与后一行合并,这表示输入数据形成不良) 因此,最终输出是:
"aa", "bb", "cc",\n
"11", "22", "33",\n
"xx", "yy", "zz"\n