规范化Ruby中的行结尾

时间:2009-12-02 21:48:09

标签: ruby newline line-breaks

我在Ruby中有一个字符串,s(比如说​​)可能有任何标准行结尾(\n\r\n\r)。我想将所有这些转换为\n s。什么是最好的方式?

这似乎是一个超常见的问题,但没有太多关于它的文档。显然有简单的原油解决方案,但有没有内置的处理这个?

优雅,惯用的Ruby解决方案是最好的。

编辑:意识到^M\r是相同的。但仍有三种情况。 (见wikipedia。)

4 个答案:

答案 0 :(得分:39)

自ruby 1.9起,您可以String::encode使用universal_newline: true将所有新行转换为\n,同时保持编码不变:

s.encode(s.encoding, universal_newline: true)

进入已知换行状态后,您可以使用:crlf_newline自由转换回CRLF。例如:将未知(可能是混合)结尾的文件转换为CRLF(例如),以二进制模式读取,然后:

s.encode(s.encoding, universal_newline: true).encode(s.encoding, crlf_newline: true)

答案 1 :(得分:37)

最好的只是处理你想要特别改变的两种情况而不是试图变得太聪明:

s.gsub /\r\n?/, "\n"

答案 2 :(得分:3)

我认为最干净的解决方案是使用正则表达式:

s.gsub! /\r\n?/, "\n"

答案 3 :(得分:-8)

尝试在NetBeans IDE上打开它们 - 如果我想修复行结尾,它之前就问过我在其他地方开过的项目之一。我认为也可能有一个菜单选项,但这将是我尝试的第一件事。