如何将文本文件拆分为三个空行?

时间:2014-08-13 18:03:21

标签: c#

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

 a
 b
 c



 d
 e
 f

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

我试过了:

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

我该怎么做?

3 个答案:

答案 0 :(得分:3)

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

<击>

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

<击>

此外,您需要将正则表达式模式指定为逐字字符串(@"...")。否则,您的\r\n将被C#编译器视为转义序列,而不是正则表达式引擎(如您所愿)。

编辑:Dan Verdolino是正确的;我的原始片段包含一个错误,因为它使用了捕获括号,这导致在数组中返回一个额外的"\r\n"字符串。这可以通过使用以下任一方法禁用捕获括号来解决:

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

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

答案 1 :(得分:1)

这有点棘手,但应该有效:

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

请注意,如果值之间有三个以上的空行,这也可以使用。

答案 2 :(得分:0)

我会将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 = {"a\r\nb\r\nc", "d\r\ne\r\nf"}