我如何分割文本文件的三个空行

  • 本文关键字:三个 分割文本 文件 c#
  • 更新时间 :
  • 英文 :


我试图将文本文件分成三行。例如,我的文本:

 a
 b
 c

 d
 e
 f

所以,我试图创建一个字符串数组,如:{"abc","def"};

我试着:

  string[] result = Regex.Split(text, "nnn");

我该怎么做?

换行符通常是n(在基于unix的系统上)或rn(在Windows上)。你应该处理这两种情况:

<罢工>

string[] result = Regex.Split(text, @"(r?n){3}");

另外,您需要将regex模式指定为逐字字符串(@"...")。否则,您的rn将被c#编译器视为转义序列,而不是regex引擎(如您所愿)。

Edit: Dan Verdolino是正确的;我的原始代码片段包含一个bug,因为它使用捕获括号,这导致在数组中返回一个额外的"rn"字符串。这可以通过使用以下命令之一禁用捕获括号来解决:

string[] result = Regex.Split(text, @"(r?n){4}", RegexOptions.ExplicitCapture);
// or //
string[] result = Regex.Split(text, @"(?:r?n){4}");  

此外,OP似乎想要匹配三个空白行;因此,正则表达式应该匹配四个连续的换行符,而不是三个。

这有点棘手,但应该可以工作:

var lines = File.ReadLines("path")
            .Select(x => x == "" ? " " : x.Trim());
var content = string.Concat(lines)
             .Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries);

注意,如果值之间的空行超过3行,也可以使用

我会使用Environment.NewLine作为独立于平台的新行。String.Split()可以正常工作。

string input = String.Format("a{0}b{0}c{0}{0}{0}d{0}e{0}f", Environment.NewLine);
string[] result = input.Split(new string[] { String.Format("{0}{0}{0}", Environment.NewLine) }, StringSplitOptions.None);

result = {"arnbrnc", "drnernf"}

最新更新