如何使用正则表达式将整个行拆分文本

时间:2013-08-02 10:56:57

标签: c# regex

我有一个文字,如下:

Data data
data data blah blah
-------------------------------------------------------------------------
Data data
data data blah blah
-------------------------------------------------------------------------
Data data
data data blah blah
-------------------------------------------------------------------------
Data data
data data blah blah
-------------------------------------------------------------------------

我希望将其拆分为---------我试过这个:

string[] splitted = Regex.Split(text, "[-][\r][\n]?");

它会拆分它,但是以错误的方式,只需要最后一次-

拆分整个短划线的正确重复文本是什么?顺便说一下,这里和那里的数据有单个破折号,我只想在有许多破折号后跟新行分开它。

3 个答案:

答案 0 :(得分:3)

您忘记使用适当的量词。您应该拆分1个或更多-。目前,你只是分成1.另外,请注意,[\r][\n]?与单\n不匹配,你也应该考虑:

尝试使用此正则表达式:

Regex.Split(text, "-+(?:\r\n|\r|\n)?");

您可以捕获群组以允许匹配最后---,但不会以换行符结尾。

答案 1 :(得分:0)

var parts = Regex.Split(text, "(?<=\r\n|^)-------------------------------------------------------------------------(?:\r\n|$)")

含义:很多-----前面有一个新行或字符串的开头,后跟一个新行或字符串的结尾。

优势在于它不会削减文本中存在的随机-

更短的:

var parts = Regex.Split(text, "(?<=\r\n|^)-{73}(?:\r\n|$)")

答案 2 :(得分:0)

使用RegexOptions.Multiline选项:

            string text = @"data1
data1-1
-------------------------------------------------------------------------
data2
data2-1
-------------------------------------------------------------------------
data3
data3-1";
            Regex re = new Regex(@"^-+", RegexOptions.Multiline);
            string[] matches = re.Split(text);
            foreach (string match in matches)
                Console.WriteLine("match = " + match/*.Trim()*/);

打印

match = data1
data1-1

match =
data2
data2-1

match =
data3
data3-1