C#Regex.Replace多个换行符

时间:2010-10-21 23:09:01

标签: c# regex

我有一个包含更多或更少段落的文本文件。文本实际上不是单词,它的逗号分隔数据;但那并不重要。文本文件有点分为几个部分;可以有部分和子部分。部分的划分由换行符表示多个换行符和子部分。

示例数据:

This is the, start of a, section
908690,246246246,246246
246246,246,246246

This is, the next, section,
sfhklj,sfhjk,4626246
4yw2,fdhds5juj,53ujj

所以上面的数据包含两个部分,每个部分有三个小节。但有时,部分之间有多个空行。发生这种情况时,我想转换多个换行符,比如\n\n\n\n只改为\n\n;我认为正则表达式可能就是这样做的。我也可能需要使用不同的换行标准,unix \n和windows \r\n。我认为这些文件可能包含多个endline编码。

这是我提出的正则表达式;没什么特别的:

Regex.Replace(input, @"([\r\n|\n]{2,})", Enviroment.NewLine + Enviroment.NewLine}

首先,这是一个很好的正则表达式解决方案吗?我对正则表达式不太好。

其次,我想将每个部分拆分成字符串数组中的元素:

Regex.Split(input, Enviroment.NewLine + Enviroment.NewLine)

有没有办法合并这些步骤?

2 个答案:

答案 0 :(得分:6)

[\r\n|\n]错了。这是与\r\n|中的一个匹配的character class

匹配通用行分隔符的常用惯用法是(?:\r\n|[\r\n])(?:\n|\r\n?)。这些将匹配\r\n(DOS / Windows),\r(较旧的Macintosh)或\n(Unix / Linux / Mac OS X)。

我会将所有行分隔符规范化为\n,然后将其拆分为两个或更多:

Regex.Split(Regex.Replace(source, @"(?:\r\n|[\r\n])", "\n"), @"\n{2,}")

答案 1 :(得分:0)

我将使用String.Split并首先使用双换行符作为分隔符将文本拆分为多个部分,然后使用单个换行符作为分隔符将每个部分拆分为子部分。 然后,您将获得所需的阵列。您可以使用List<string>对象作为容器,并使用AddRange将拆分方法返回的数组添加到容器中。