如何使用正则表达式将文本拆分为整行
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
【讨论】:
以上是关于如何使用正则表达式将文本拆分为整行的主要内容,如果未能解决你的问题,请参考以下文章