.NET Regex删除行情中的换行符

时间:2014-04-21 18:06:25

标签: c# regex

我正在尝试清理文本文件,以便将其导入Excel,但文本文件包含多个双引号字段中的换行符。该文件以制表符分隔。

示例是:

"12313"\t"1234"\t"123

5679"
"test"\t"test"\t"test"
"test"\t"test"\t"test"
"12313"\t"1234"\t"123

5679"

我需要删除换行符,以便最终显示如下:

"12313"\t"1234"\t"1235679"
"test"\t"test"\t"test"
"test"\t"test"\t"test"
"12313"\t"1234"\t"1235679"

“\ t”是制表符分隔符。

我在SO上看了几个其他的解决方案,但它们似乎没有处理多行。我们尝试过使用多种CSV解析器解决方案,但似乎无法让它们适用于这种情况。目标是将整个字符串传递给REGEX表达式并让它返回,并且在引号之外的换行符保留的情况下删除引号之间的所有换行符。

4 个答案:

答案 0 :(得分:5)

您可以使用此正则表达式:

(?!(([^"]*"){2})*[^"]*$)\n+

Working Demo

这个匹配一个或多个新行字符未遵循偶数引号(它假设数据中没有转义异常)。

答案 1 :(得分:0)

如果仅删除空白行:

string text = Regex.Replace( inputString, @"\n\n", "" , RegexOptions.None | RegexOptions.Multiline );

答案 2 :(得分:0)

这对我有用:

var fixedCsvFileContent = Regex.Replace(csvFileContent, @"(?!(([^""]*""){2})*[^""]*$)\n+", string.Empty);

没有工作:

var fixedCsvFileContent = Regex.Replace(csvFileContent, @"(?!(([^""]*""){2})*[^""]*$)\n+", string.Empty, RegexOptions.Multiline);

因此,在对输入字符串进行检查时,不得添加RegexOptions.Multiline。

答案 3 :(得分:-1)

string output = Regex.Replace(input, @"(?<=[^""])\r\n", string.Empty);

Demo with the input provided