我如何分割文本文件的三个空行
本文关键字:三个 分割文本 文件 | 更新日期: 2023-09-27 18:17:47
我试图将文本文件分成三行。例如,我的文本:
a
b
c
d
e
f
所以,我试图创建一个字符串数组,如:{"abc","def"};
我试着:
string[] result = Regex.Split(text, "'n'n'n");
我该怎么做?
换行符通常是'n
(在基于unix的系统上)或'r'n
(在Windows上)。你应该处理这两种情况:
<罢工>罢工>
string[] result = Regex.Split(text, @"('r?'n){3}");
另外,您需要将regex模式指定为逐字字符串(@"..."
)。否则,您的'r
和'n
将被c#编译器视为转义序列,而不是regex引擎(如您所愿)。
Edit: Dan Verdolino是正确的;我的原始代码片段包含一个bug,因为它使用捕获括号,这导致在数组中返回一个额外的"'r'n"
字符串。这可以通过使用以下命令之一禁用捕获括号来解决:
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 = {"a'r'nb'r'nc", "d'r'ne'r'nf"}