C# .NET正则表达式删除引号内的换行符

C# .NET正则表达式删除引号内的换行符,c#,regex,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"

我试图清理一个文本文件,以便将其导入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解析器解决方案,但似乎无法让它们在这种情况下工作。目标是将整个字符串传递到正则表达式中,并使其返回,同时删除引号之间的所有换行符,同时保留引号之外的换行符。

string output=REGEX.Replace(输入,@)(?
string output=REGEX.Replace)(输入,@)(?您可以使用此正则表达式:

string output = Regex.Replace(input, @"(?<=[^""])\r\n", string.Empty);
(?!(([^"]*"){2})*[^"]*$)\n+

这一个匹配一个或多个换行符,这些换行符后面没有偶数引号(它假设数据中没有转义异常)。

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

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

这一个匹配一个或多个换行符,这些换行符后面没有偶数引号(它假设数据中没有转义异常)。

如果只删除空行有效:

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

如果仅删除空行有效:

string text = Regex.Replace( inputString, @"\n\n", "" , RegexOptions.None | RegexOptions.Multiline );
这对我很有用:

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

var fixedCsvFileContent = Regex.Replace(csvFileContent, @"(?!(([^""]*""){2})*[^""]*$)\n+", string.Empty, RegexOptions.Multiline);
因此,在对输入字符串进行检查时,不能添加RegexOptions.Multiline。

这对我很有用:

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

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

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

请向我们展示您尝试过且失败的regex。事实证明,引号中的换行与实际行之间的换行不同。如果您能在能够显示换行的文本编辑器中使用示例找到它wlines符号,您可能可以使用一个非常简单的正则表达式。如果它们是相同的换行符,那么您必须以一种更复杂的方式来执行,例如anubhava的正则表达式。@Jerry-您知道有任何文本编辑器会在文本文件中显示实际的换行符吗?这对确定是否换行有很大帮助只是\n或其他什么。谢谢你的评论。@ChasonArthur我知道记事本++有,显然有一个可以显示它们的软件包,显然还有Ctrl+
来显示它们。虽然我不知道有多少编辑器,但普通的记事本、写字板等都不支持它。请给我们看看你没有的正则表达式ried和那都失败了。结果证明引号中的换行符与实际行之间的换行符不同。如果你能在一个能够显示换行符的文本编辑器中通过某种方式找到它,你可能可以使用一个非常简单的正则表达式。如果它们是相同的换行符,那么你就必须在一种更复杂的方式,例如anubhava的regex。@Jerry-你知道有任何文本编辑器会在文本文件中显示实际的换行符吗?这对确定换行符是简单的还是其他东西会有很大帮助。谢谢你的评论。@ChasonArthur我知道Notepad++会,显然有一个包f我不知道有多少编辑器,但是普通的记事本、写字板等都不支持。