我有一个包含更多或更少段落的文本文件。文本实际上不是单词,它的逗号分隔数据;但那并不重要。文本文件有点分为几个部分;可以有部分和子部分。部分的划分由换行符表示多个换行符和子部分。
示例数据:
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)
有没有办法合并这些步骤?
答案 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
将拆分方法返回的数组添加到容器中。