1

我有一个文本,是这样的:

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]?");

它确实拆分了它,但是以错误的方式,它只取最后一个-

什么是正确的正则表达式来拆分这个删除整个破折号。顺便说一句,数据在这里和那里都有单破折号,我只想在有很多破折号后跟新行时拆分它。

4

3 回答 3

3

您忘记使用适当的量词。您应该拆分 1 或更多-。目前您只拆分 1。另外,请注意,[\r][\n]?将不匹配 single \n,您还应该考虑:

尝试使用这个正则表达式:

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

您可以捕获组以允许匹配最后一个---不以换行符结尾的组。

于 2013-08-02T10:59:12.957 回答
0
var parts = Regex.Split(text, "(?<=\r\n|^)-------------------------------------------------------------------------(?:\r\n|$)")

含义:许多-----前面是换行符或字符串的开头,后面是换行符或字符串的结尾。

优点是它不会剪切文本中随机-出现的内容。

更短:

var parts = Regex.Split(text, "(?<=\r\n|^)-{73}(?:\r\n|$)")
于 2013-08-02T11:11:07.623 回答
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
于 2013-08-02T11:32:20.277 回答