当前位置:  开发笔记 > 编程语言 > 正文

规范化C#中的换行符

如何解决《规范化C#中的换行符》经验,为你挑选了2个好方法。

我有一个数据流可能包含\ r,\n,\ r \n,\n\r或它们的任意组合.是否有一种简单的方法来规范化数据,使其全部简单地成为\ r \n对,以使显示更加一致?

所以会产生这种翻译表的东西:

\r     --> \r\n
\n     --> \r\n
\n\n   --> \r\n\r\n
\n\r   --> \r\n
\r\n   --> \r\n
\r\n\n --> \r\n\r\n

Derek Park.. 35

我相信这会做你需要的:

using System.Text.RegularExpressions;
// ...
string normalized = Regex.Replace(originalString, @"\r\n|\n\r|\n|\r", "\r\n");

我对确切的语法并不是100%肯定,而且我没有.Net编译器方便检查.我在perl中编写它,并将其转换为(希望是正确的)C#.唯一真正的诀窍是首先匹配"\ r \n"和"\n\r".

要将它应用于整个流,只需运行一大堆输入.(如果需要,可以使用流包装器执行此操作.)


原来的perl:

$str =~ s/\r\n|\n\r|\n|\r/\r\n/g;

测试结果:

[bash$] ./test.pl
\r -> \r\n
\n -> \r\n
\n\n -> \r\n\r\n
\n\r -> \r\n
\r\n -> \r\n
\r\n\n -> \r\n\r\n

更新:现在将\n\r转换为\ r \n,但我不会调用该规范化.



1> Derek Park..:

我相信这会做你需要的:

using System.Text.RegularExpressions;
// ...
string normalized = Regex.Replace(originalString, @"\r\n|\n\r|\n|\r", "\r\n");

我对确切的语法并不是100%肯定,而且我没有.Net编译器方便检查.我在perl中编写它,并将其转换为(希望是正确的)C#.唯一真正的诀窍是首先匹配"\ r \n"和"\n\r".

要将它应用于整个流,只需运行一大堆输入.(如果需要,可以使用流包装器执行此操作.)


原来的perl:

$str =~ s/\r\n|\n\r|\n|\r/\r\n/g;

测试结果:

[bash$] ./test.pl
\r -> \r\n
\n -> \r\n
\n\n -> \r\n\r\n
\n\r -> \r\n
\r\n -> \r\n
\r\n\n -> \r\n\r\n

更新:现在将\n\r转换为\ r \n,但我不会调用该规范化.


您需要从替换字符串中删除"@".如果不这样做,它会将'\ r \n'替换为'\\ r \\n',因为你要求文字字符串"\ r \n".更好的是用Environment.NewLine常量替换.

2> Joe..:

我和Regie的Jamie Zawinski在一起:

"有些人在面对问题时会想"我知道,我会使用正则表达式."现在他们有两个问题"

对于我们这些喜欢可读性的人:

步骤1

用\n替换\ r \n

用\n替换\n \n(如果你真的想要这个,有些海报似乎没有想到)

用\n替换\ r

步骤2用Environment.NewLine或\ r \n或其他替换\n.


这是一个微不足道的正则表达式.如果是HTML解析,我会同意你的看法.
推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有