C# 从c中的文本文件中删除CR LF#
我有一个包含以下行的文本文件,例如: 我只想在前一行末尾包含CR时删除CR LF。通过正则表达式,我可以删除oall字符,但我无法建立条件来检查前一行 有人能帮我吗?你可以用C# 从c中的文本文件中删除CR LF#,c#,regex,newline,str-replace,C#,Regex,Newline,Str Replace,我有一个包含以下行的文本文件,例如: 我只想在前一行末尾包含CR时删除CR LF。通过正则表达式,我可以删除oall字符,但我无法建立条件来检查前一行 有人能帮我吗?你可以用 (\r)[\p{Zs}\t]*\r\n 并替换为$1 详细信息 (\r)-第1组:CR [\p{Zs}\t]*-后跟0+水平空格 \r\n-和一个CRLF 替换是指纳入第1组的CR。见a: var s=“第1行\r\r\n第2行\r\n\r\n更多文本”; Console.WriteLine(Regex.Repla
(\r)[\p{Zs}\t]*\r\n
并替换为$1
详细信息
-第1组:CR(\r)
-后跟0+水平空格[\p{Zs}\t]*
-和一个CRLF\r\n
var s=“第1行\r\r\n第2行\r\n\r\n更多文本”;
Console.WriteLine(Regex.Replace(s,@“(\r)[\p{Zs}\t]*\r\n“,“$1”)
.Replace(“\r”,”).Replace(“\n”,”);
//=>第1行第2行更多文本
您可以替换
\r(?= *\r)
一无所有
它只是简单地匹配CR
,后跟CR
(可选地前面加空格)。实际匹配仅为第一个CR
,其余部分通过前瞻完成,因此替换仅替换缺少的CR
,即LF
这与您所要求的略有不同,因为它没有删除CRLF
,而是删除了单个CR
,这将使所有CRLF
结尾的文件更加统一,而不是混合使用单个CR
和CRLF
行尾
即
编辑
考虑到这一点,我的解决方案将在CR
-only行之后的行的开头留下空格,并在其末尾。你所描述的解决方案将在下一篇文章的开头离开我。我猜最好是把它们去掉。为此,请将RE更改为
\r *(?=\r)
使其同时匹配空格,并使替换程序将其删除。使用以下代码将其存档:
String strFile = File.ReadAllText(@file, Encoding.Default);
Regex re = new Regex("\r(?= *\r)");
strFile = re.Replace(strFile, "");
File.WriteAllText(@file + ".tmp", strFile);
您的意思是要删除以CR结尾的行后面的纯空白行吗?尝试
(\r\h*\r\n
并替换为$1
您尝试了什么?另外,请编辑您的问题,将文本放置在问题中,而不是图像。@NightOwl888我相信图像比文本更好。好的,至少很清楚OP有什么类型的输入。这个“(\r)\h*\r\n”在记事本++中工作,但是当我在VS中使用它时,使用以下代码:strFile=Regex.Replace(strFile,@”(\r)\h*\r\n“,“$1”);它抛出了一个异常:(@PatrickGrebe在C#中,您只需要将\h
替换为[\p{Zs}\t]
或[\s-[\r\n]]]
,请参见下面我的答案。
\r *(?=\r)
String strFile = File.ReadAllText(@file, Encoding.Default);
Regex re = new Regex("\r(?= *\r)");
strFile = re.Replace(strFile, "");
File.WriteAllText(@file + ".tmp", strFile);