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

Posted

技术标签:

【中文标题】如何使用正则表达式将文本拆分为整行【英文标题】:How to split a text by a whole line using regex 【发布时间】:2013-08-02 10:56:57 【问题描述】:

我有一个文本,类似这样:

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

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

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

【问题讨论】:

在字符串 ------------------------------------------------------------------------- 上使用 string.Split ? @BenjaminGruenbaum 有时破折号的长度不固定.. 【参考方案1】:

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

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

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

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

【讨论】:

我喜欢所有回答 SO 的正则表达式忍者 如果末尾没有换行符会有帮助吗?因为当有 last ------------ 它不会删除 ------ @NisargShah。编辑正则表达式。只需将组设为可选。请注意,我更改了您匹配换行符的方式。 是的。谢谢... @RohitJain @Heather 不只是喜欢他,让他带你去约会。也许他可以向您展示一些正则表达式技巧:p【参考方案2】:
var parts = Regex.Split(text, "(?<=\r\n|^)-------------------------------------------------------------------------(?:\r\n|$)")

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

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

更短:

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

【讨论】:

【参考方案3】:

使用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

【讨论】:

以上是关于如何使用正则表达式将文本拆分为整行的主要内容,如果未能解决你的问题,请参考以下文章

通过定义标题的正则表达式拆分 Markdown 文本文件

Python - 用于将文本拆分为句子的正则表达式(句子标记)[重复]

Java - 正则表达式拆分输入文本但保留分隔符[重复]

正则表达式拆分文本

grep文本处理工具正则表达式

如何使用正则表达式拆分列以将尾随 CAPS 移动到单独的列中?