从 C# 中的文本文件中删除 CR LF
Remove CR LF from text file in c#
我有一个包含以下行的文本文件,例如:
我只想在前一行末尾包含 CR 时删除 CR LF。通过正则表达式我可以删除所有字符,但我无法建立条件来检查前一行。
谁能帮帮我?
您可以使用
(\r)[\p{Zs}\t]*\r\n
并替换为 </code>。</p>
<p><strong>详情</strong></p>
<ul>
<li><code>(\r)
- 第 1 组:CR
[\p{Zs}\t]*
- 后跟 0+ 个水平空格
\r\n
- 和一个 CRLF。
替换是捕获到第 1 组的 CR。请参阅 C# demo:
var s = " Line 1\r \r\n Line 2\r\n \r\n more text";
Console.WriteLine(Regex.Replace(s, @"(\r)[\p{Zs}\t]*\r\n", "")
.Replace("\r", "<CR>").Replace("\n", "<LF>"));
// => Line 1<CR> Line 2<CR><LF> <CR><LF> more text
你可以替换
\r(?= *\r)
一无所有。
它只匹配 CR
后跟 CR
(可选地在前面加上 space)。实际匹配是 只有 第一个 CR
其余的是通过前瞻完成的,所以替换只替换缺少的 CR
它是 LF
.
这与您的要求略有不同,因为它没有删除 CRLF
,而是删除了单个 CR
,这将使所有 CRLF
结尾,而不是单个 CR
和 CRLF
结尾的混合 .
即
Regex re = new Regex("\r(?= *\r)");
string sResult = re.Replace( sInput, "").ToString() );
编辑
考虑到这一点,我的解决方案将在一行的开头留下 spaces,然后是 CR
-only 行,在它的末尾。您描述的解决方案将在下一个开始时离开。我猜首选是删除它们。为此,将 RE 更改为
\r *(?=\r)
使其 匹配 space ,使替换删除它们。
使用以下代码将其归档:
String strFile = File.ReadAllText(@file, Encoding.Default);
Regex re = new Regex("\r(?= *\r)");
strFile = re.Replace(strFile, "");
File.WriteAllText(@file + ".tmp", strFile);
我有一个包含以下行的文本文件,例如:
我只想在前一行末尾包含 CR 时删除 CR LF。通过正则表达式我可以删除所有字符,但我无法建立条件来检查前一行。
谁能帮帮我?
您可以使用
(\r)[\p{Zs}\t]*\r\n
并替换为 </code>。</p>
<p><strong>详情</strong></p>
<ul>
<li><code>(\r)
- 第 1 组:CR
[\p{Zs}\t]*
- 后跟 0+ 个水平空格\r\n
- 和一个 CRLF。替换是捕获到第 1 组的 CR。请参阅 C# demo:
var s = " Line 1\r \r\n Line 2\r\n \r\n more text";
Console.WriteLine(Regex.Replace(s, @"(\r)[\p{Zs}\t]*\r\n", "")
.Replace("\r", "<CR>").Replace("\n", "<LF>"));
// => Line 1<CR> Line 2<CR><LF> <CR><LF> more text
你可以替换
\r(?= *\r)
一无所有。
它只匹配 CR
后跟 CR
(可选地在前面加上 space)。实际匹配是 只有 第一个 CR
其余的是通过前瞻完成的,所以替换只替换缺少的 CR
它是 LF
.
这与您的要求略有不同,因为它没有删除 CRLF
,而是删除了单个 CR
,这将使所有 CRLF
结尾,而不是单个 CR
和 CRLF
结尾的混合 .
即
Regex re = new Regex("\r(?= *\r)");
string sResult = re.Replace( sInput, "").ToString() );
编辑
考虑到这一点,我的解决方案将在一行的开头留下 spaces,然后是 CR
-only 行,在它的末尾。您描述的解决方案将在下一个开始时离开。我猜首选是删除它们。为此,将 RE 更改为
\r *(?=\r)
使其 匹配 space ,使替换删除它们。
使用以下代码将其归档:
String strFile = File.ReadAllText(@file, Encoding.Default);
Regex re = new Regex("\r(?= *\r)");
strFile = re.Replace(strFile, "");
File.WriteAllText(@file + ".tmp", strFile);