我试图将文本文件分成三行。例如,我的文本:
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模式指定为逐字字符串(@"..."
)。否则,您的r
和n
将被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"}