我试图将文本文件拆分三行。例如,我的文字:
a
b
c
d
e
f
所以,我试图创建一个字符串数组,如:{“abc”,“def”};
我试过了:
string[] result = Regex.Split(text, "\n\n\n");
我该怎么做?
答案 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"}