我想使用位于行尾的\n
拆分字符串,并忽略引号内的\n
。
输入:
11, 12, "inside\n the\n quotes", 13, 14\n21, 22, "another \ntest\n case", 23, 24
上面的字符串应分为:
11, 12, "inside the quotes", 13, 14
21, 22, "another test case", 23, 24
我尝试过使用它:
Regex.Split(data, "\n|^(['""].+[\n].+)");
但它不会忽略引号内的\n
。
请指导我出错的地方。
答案 0 :(得分:2)
如果由于某种原因您无法使用CSV解析器,则可以使用此正则表达式:
Regex.Split(data, "(?=(?:(?:[^\"]*\"){2})*[^\"]*$)\\n");
仅当它在双引号之外时才匹配\n
。正如在\n
之后,正则表达式正在预测偶数引号。
答案 1 :(得分:0)
这个怎么样:
string value = "11, 12, \"inside\n the\n quotes\", 13, 14\n21, 22, \"another \ntest\n case\", 23, 24";
var values =
Regex.Split(value, "^")
.Where(x => !string.IsNullOrEmpty(x))
.SelectMany(x => Regex.Split(x, ","))
.Where(x => !string.IsNullOrEmpty(x));
答案 2 :(得分:0)
看起来最终的工作答案是当前答案的混合。
var value = "11, 12, \"inside\n the\n quotes\", 13, 14\n21, 22, \"another \ntest\n case\", 23, 24";
var values = Regex.Split(value, @"(?s)(?=(?:(?:[^""]*?""){2})*?[^""]*?$)\n");
我更喜欢延迟匹配,因此我尽可能地添加?
量词。
输出: