Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从c中的文本文件中删除CR LF#_C#_Regex_Newline_Str Replace - Fatal编程技术网

C# 从c中的文本文件中删除CR LF#

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

我有一个包含以下行的文本文件,例如:

我只想在前一行末尾包含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.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);