我有一个制表符分隔的文本文件,其中包含以下格式的行:
I000001 \t I000002 \t "废话废话。废话。废话。废话"
我正在尝试拆分每个选项卡上的每一行,因此上面的行将分为三个部分
当没有空格或引号时,我已经能够根据需要拆分每一行,但是当有空格或引号时我遇到了困难。
这是我尝试过的类似于上面的行:
var x = from lines in data
.Where(l => !string.IsNullOrEmpty(l))
.Select(l => l.Split('\t'))
select new
{
A = lines[0].Trim(),
B = lines[1].Trim(),
C = lines[2].Trim()
};
上面生成了一个索引为 [0]、[1]、[2] 的数组。每个索引都有三个由上述字符串组成的成员(见下图)。它应该只有一个索引和三个成员。
请注意数组中的第一项如何具有三个元素。数组中还有两个项目,在第一个之下。它们都有 3 个元素,这三个元素包含用双引号括起来的字符串的其余部分。
解决方案:
根据选定的答案,引号内的句子中有额外的标签,导致额外的项目被添加到数组中。为了解决这个问题,我使用了一个正则表达式,改编自这个答案:
line = Regex.Replace(line, @"""[^""]+""", m => m.Value.Replace('\t', ' '));